
    Ej-                     ~    d dl Zd dlmZmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ e
 dZ G d	 d
          ZdS )    N)DictOptional)utils)YfConfig)
_BASE_URL_)YfData)YFDataExceptionz/v10/finance/quoteSummary/c                      e Zd ZdZdedefdZdefdZedefd            Z	ede
eee         f         fd            Zedej        fd	            Zede
eef         fd
            Zedej        fd            Zedej        fd            Zedej        fd            Zede
eef         fd            Zede
eef         fd            Zd ZddZedd            ZddZddZd ZdS )	FundsDataz
    ETF and Mutual Funds Data
    Queried Modules: quoteType, summaryProfile, fundProfile, topHoldings

    Notes: 
    - fundPerformance module is not implemented as better data is queryable using history
    datasymbolc                     || _         || _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _	        d| _
        d| _        dS )z
        Args:
            data (YfData): The YfData object for fetching data.
            symbol (str): The symbol of the fund.
        N)_data_symbol_quote_type_description_fund_overview_fund_operations_asset_classes_top_holdings_equity_holdings_bond_holdings_bond_ratings_sector_weightings)selfr   r   s      S/var/www/html/bolsaweb/venv/lib/python3.11/site-packages/yfinance/scrapers/funds.py__init__zFundsData.__init__   sp     
   ! # $ #! $"!"&    returnc                 F    | j         |                                  | j         S )zh
        Returns the quote type of the fund.

        Returns:
            str: The quote type.
        )r   _fetch_and_parser   s    r   
quote_typezFundsData.quote_type/   s(     #!!###r   c                 F    | j         |                                  | j         S )zj
        Returns the description of the fund.

        Returns:
            str: The description.
        )r   r!   r"   s    r   descriptionzFundsData.description:   s(     $!!###  r   c                 F    | j         |                                  | j         S )zw
        Returns the fund overview.

        Returns:
            Dict[str, Optional[str]]: The fund overview.
        )r   r!   r"   s    r   fund_overviewzFundsData.fund_overviewF   (     &!!###""r   c                 F    | j         |                                  | j         S )zo
        Returns the fund operations.

        Returns:
            pd.DataFrame: The fund operations.
        )r   r!   r"   s    r   fund_operationszFundsData.fund_operationsR   (      (!!###$$r   c                 F    | j         |                                  | j         S )z{
        Returns the asset classes of the fund.

        Returns:
            Dict[str, float]: The asset classes.
        )r   r!   r"   s    r   asset_classeszFundsData.asset_classes^   r(   r   c                 F    | j         |                                  | j         S )zu
        Returns the top holdings of the fund.

        Returns:
            pd.DataFrame: The top holdings.
        )r   r!   r"   s    r   top_holdingszFundsData.top_holdingsj   (     %!!###!!r   c                 F    | j         |                                  | j         S )z{
        Returns the equity holdings of the fund.

        Returns:
            pd.DataFrame: The equity holdings.
        )r   r!   r"   s    r   equity_holdingszFundsData.equity_holdingsv   r+   r   c                 F    | j         |                                  | j         S )zw
        Returns the bond holdings of the fund.

        Returns:
            pd.DataFrame: The bond holdings.
        )r   r!   r"   s    r   bond_holdingszFundsData.bond_holdings   r(   r   c                 F    | j         |                                  | j         S )zy
        Returns the bond ratings of the fund.

        Returns:
            Dict[str, float]: The bond ratings.
        )r   r!   r"   s    r   bond_ratingszFundsData.bond_ratings   r0   r   c                 F    | j         |                                  | j         S )z
        Returns the sector weightings of the fund.

        Returns:
            Dict[str, float]: The sector weightings.
        )r   r!   r"   s    r   sector_weightingszFundsData.sector_weightings   s(     "*!!###&&r   c                     d                     g d          }|d| j        dd}| j                            t          | j        z   |          }|S )zp
        Fetches the raw JSON data from the API.

        Returns:
            dict: The raw JSON data.
        ,)	quoteTypesummaryProfiletopHoldingsfundProfilezfinance.yahoo.comfalse)modules
corsDomainr   	formatted)params)joinr   r   get_raw_json_QUOTE_SUMMARY_URL_)r   r@   params_dictresults       r   _fetchzFundsData._fetch   s[     ((XXXYY")9LX\Xdsz{{(()<T\)IR](^^r   Nc                    |                                  }	 |d         d         d         }|d         d         | _        |                     |d                    |                     |d                    |                     |d                    dS # t
          $ r* t          j        j        s t          | j
         d          t          $ r}t          j        j        s t          j                    }|                    d	| j
         d
|            |                    d           |                    d           |                    d|            |                    d           Y d}~dS d}~ww xY w)z;
        Fetches and parses the data from the API.
        quoteSummaryrH   r   r;   r<   r=   r>   z: No Fund data found.zFailed to get fund data for 'z
' reason: zGot response: z------------- N)rI   r   _parse_description_parse_top_holdings_parse_fund_profileKeyErrorr   debughide_exceptionsr	   r   	Exceptionr   get_yf_loggererror)r   rH   r   eloggers        r   r!   zFundsData._fetch_and_parse   s    	*.)(3A6D#K0=D ##D)9$:;;;$$T-%8999$$T-%899999 	J 	J 	J>1 !T\"H"H"HIII 	* 	* 	*>1 (**FLLTTTQRTTUUULL)***LL)))LLT$$$LL)))))))))	*s   A8B <E3BE..E3c                 \    t          | t                    s| S |                     d|          S )z
        Parses raw values from the data.

        Args:
            data: The data to parse.
            default: The default value if data is not a dictionary.

        Returns:
            The parsed value or the default value.
        raw)
isinstancedictget)r   defaults     r   _parse_raw_valueszFundsData._parse_raw_values   s/     $%% 	Kxxw'''r   c                 <    |                     dd          | _        dS )zk
        Parses the description from the data.

        Args:
            data: The data to parse.
        longBusinessSummary N)r\   r   )r   r   s     r   rM   zFundsData._parse_description   s!     !HH%:B??r   c                 F   |                      |                    dd                    |                      |                    dd                    |                      |                    dd                    |                      |                    dd                    |                      |                    dd                    |                      |                    dd                    d| _        |                    d	g           }g g g }}}|D ]S}|                    |d
                    |                    |d                    |                    |d                    Tt	          j        |||d                              d          | _        |                    di           }t	          j        dg d| j        |                      |                    dt          j	                            |                      |                    dt          j	                            |                      |                    dt          j	                            |                      |                    dt          j	                            |                      |                    dt          j	                            |                      |                    dt          j	                            gd|                      |                    dt          j	                            |                      |                    dt          j	                            |                      |                    dt          j	                            |                      |                    dt          j	                            |                      |                    dt          j	                            |                      |                    dt          j	                            gi                              d          | _
        |                    di           }t	          j        dg d | j        |                      |                    d!t          j	                            |                      |                    d"t          j	                            |                      |                    d#t          j	                            gd|                      |                    d$t          j	                            |                      |                    d%t          j	                            |                      |                    d&t          j	                            gi                              d          | _        t          d' |                    d(g           D                       | _        t          d) |                    d*g           D                       | _        dS )+zl
        Parses the top holdings from the data.

        Args:
            data: The data to parse.
        cashPositionNstockPositionbondPositionpreferredPositionconvertiblePositionotherPosition)rc   rd   re   rf   rg   rh   holdingsr   holdingNameholdingPercent)SymbolNamezHolding Percentrl   equityHoldingsAverage)zPrice/Earningsz
Price/BookzPrice/SaleszPrice/CashflowzMedian Market Capz3 Year Earnings GrowthpriceToEarningspriceToBookpriceToSalespriceToCashflowmedianMarketCapthreeYearEarningsGrowthCategory AveragepriceToEarningsCatpriceToBookCatpriceToSalesCatpriceToCashflowCatmedianMarketCapCatthreeYearEarningsGrowthCatbondHoldings)DurationMaturityzCredit QualitydurationmaturitycreditQualitydurationCatmaturityCatcreditQualityCatc              3   4   K   | ]}|D ]}|||         fV  d S N .0dkeys      r   	<genexpr>z0FundsData._parse_top_holdings.<locals>.<genexpr>/  s9      !b!bA`a!b!bY\3#-!b!b!b!b!b!b!br   bondRatingsc              3   4   K   | ]}|D ]}|||         fV  d S r   r   r   s      r   r   z0FundsData._parse_top_holdings.<locals>.<genexpr>2  s9      &l&ljk&l&lcfQsV}&l&l&l&l&l&l&lr   sectorWeightings)r^   r\   r   appendpd	DataFrame	set_indexr   r   NAr   r   r[   r   r   )	r   r   	_holdingsr   _name_holding_percentitemr   r   s	            r   rN   zFundsData._parse_top_holdings   sO    !22488ND3Q3QRR!33DHH_d4S4STT 22488ND3Q3QRR!%!7!7ATVZ8[8[!\!\#'#9#9$((CXZ^:_:_#`#`!33DHH_d4S4STT
 
 HHZ,,	+-r2( 	< 	<DNN4>***LLm,---##D)9$:;;;;\/+
 +
   9X	 	  88$4b99 "  H  H  HL&&'7';';<Mru'U'UVV&&'7';';M25'Q'QRR&&'7';';NBE'R'RSS&&'7';';<Mru'U'UVV&&'7';';<Mru'U'UVV&&'7';';<UWYW\']']^^ &&'7';';<PRTRW'X'XYY&&'7';';<Lbe'T'TUU&&'7';';<Mru'U'UVV&&'7';';<PRTRW'X'XYY&&'7';';<PRTRW'X'XYY&&'7';';<XZ\Z_'`'`aa!.
 ! !$ 9Y% 	* ."55 lAAAL&&~'9'9*be'L'LMM&&~'9'9*be'L'LMM&&~'9'9/25'Q'QRR
 &&~'9'9-'O'OPP&&~'9'9-'O'OPP&&~'9'9:Lbe'T'TUU!,
   9Y 	 "!b!b-QS9T9T!b!b!bbb #'&l&ldhhGY[]>^>^&l&l&l"l"lr   c                    |                     dd          |                     dd          |                     dd          d| _        |                     di           }|                     di           }t          j        dg d	| j        |                     |                     d
t          j                            |                     |                     dt          j                            |                     |                     dt          j                            gd|                     |                     d
t          j                            |                     |                     dt          j                            |                     |                     dt          j                            gi                              d          | _        dS )zl
        Parses the fund profile from the data.

        Args:
            data: The data to parse.
        categoryNameNfamily	legalType)r   r   r   feesExpensesInvestmentfeesExpensesInvestmentCat
Attributes)zAnnual Report Expense RatiozAnnual Holdings TurnoverzTotal Net AssetsannualReportExpenseRatioannualHoldingsTurnovertotalNetAssetsrv   )	r\   r   r   r   r   r^   r   r   r   )r   r   r   _fund_operations_cats       r   rO   zFundsData._parse_fund_profile4  s    !HH^T:: HHXt44 HH[$77
 
  88$<bAA#xx(CRHH "iiiL&&'7';';<VXZX]'^'^__&&'7';';<TVXV['\'\]]&&'7';';<Lbe'T'TUU
 &&';'?'?@Z\^\a'b'bcc&&';'?'?@XZ\Z_'`'`aa&&';'?'?@PRTRW'X'XYY!.
 ! ! 9\"" 	r   )r   Nr   )__name__
__module____qualname____doc__r   strr   r#   propertyr%   r   r   r'   r   r   r*   floatr-   r/   r2   r4   r6   r8   rI   r!   staticmethodr^   rM   rN   rO   r   r   r   r   r      sq        'V 'S ' ' ' '6	 C 	  	  	  	  	!S 	! 	! 	! X	! 	#tC#$67 	# 	# 	# X	# 	% 	% 	% 	% X	% 	#tCJ/ 	# 	# 	# X	# 	"bl 	" 	" 	" X	" 	% 	% 	% 	% X	% 	#r| 	# 	# 	# X	# 	"d3:. 	" 	" 	" X	" 	'4E	? 	' 	' 	' X	'
 
 
* * * *8 ( ( ( \( @ @ @ @Jm Jm Jm JmX# # # # #r   r   )pandasr   typingr   r   yfinancer   yfinance.configr   yfinance.constr   yfinance.datar   yfinance.exceptionsr	   rF   r   r   r   r   <module>r      s        ! ! ! ! ! ! ! !       $ $ $ $ $ $ % % % % % %             / / / / / /#??? D# D# D# D# D# D# D# D# D# D#r   