
    Ejjz                        d dl Z d dlZd dlZd dlZd dlZd dlmZ d dl	m
Z
 d dlmZ d dlmZmZmZ d dlmZ d dlmZmZ h dZe                    d	 d
D                        e                    h d           e                    h d           h dZdhZdhZeez  ez  ez  Ze dZ G d d          Z G d d          ZdS )    N)BeautifulSoup)utils)YfConfig)quote_summary_valid_modules
_BASE_URL__QUERY1_URL_)YfData)YFDataExceptionYFException>   opendayLowvolumedayHigh
volume24HrcurrentPricepreviousClosec                     h | ]}d |z   S )regularMarket ).0ss     S/var/www/html/bolsaweb/venv/lib/python3.11/site-packages/yfinance/scrapers/quote.py	<setcomp>r      s    }}}a 1}}}    )DayHighDayLowOpenPreviousClosePriceVolume>   52WeekChangefiftyDayAveragefiftyTwoWeekLowfiftyTwoWeekHighfiftyTwoWeekChangetwoHundredDayAverage>   averageVolumeaverageVolume10daysaverageDailyVolume10Day>   currencyexchange	quoteTypeexchangeTimezoneNameexchangeTimezoneShortName	marketCapsymbolz/v10/finance/quoteSummaryc                   ,   e Zd Zd Zd Zd Zd Zd(dZd Zd Z	d	 Z
d
 Zd Zd)dZd*dZd Zd Zd Zd Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed              Z ed!             Z!ed"             Z"ed#             Z#ed$             Z$ed%             Z%ed&             Z&ed'             Z'dS )+FastInfoc                    || _         d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _	        d | _
        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        g d}|ddgz  }|g dz  }|dgz  }|dgz  }|g dz  }|g dz  }d	 |D             }d
 |D             }d |D             | _        d | j                                        D             | _        t9          |t;          | j                                                  z             | _        t9          | j        |z             | _         d S )N)r*   
quote_typer+   timezoneshares
market_cap)
last_priceprevious_closer   day_highday_lowregular_market_previous_closelast_volume)fifty_day_averagetwo_hundred_day_averageten_day_average_volumethree_month_average_volume)	year_highyear_lowyear_changec                     g | ]}d |v|	S _r   r   ks     r   
<listcomp>z%FastInfo.__init__.<locals>.<listcomp>N   s    <<<1s!||Q|||r   c                     g | ]}d |v |	S rF   r   rH   s     r   rJ   z%FastInfo.__init__.<locals>.<listcomp>P   s    666SAXX1XXXr   c                 8    i | ]}|t          j        |          S r   )r   snake_case_2_camelCaserH   s     r   
<dictcomp>z%FastInfo.__init__.<locals>.<dictcomp>R   s%    RRRQa!=a!@!@RRRr   c                     i | ]\  }}||	S r   r   )r   rI   vs      r   rN   z%FastInfo.__init__.<locals>.<dictcomp>S   s    JJJtq!aJJJr   )!_tkr
_prices_1y_prices_1wk_1h_prepost_prices_1wk_1h_reg_md	_currency_quote_type	_exchange	_timezone_shares_mcap_open	_day_high_day_low_last_price_last_volume_prev_close_reg_prev_close_50d_day_average_200d_day_average
_year_high	_year_low_year_change_10d_avg_vol_3mo_avg_vol_sc_to_cc_keyitems_cc_to_sc_keysortedlistvalues_public_keys_keys)selftickerBaseObject_properties	base_keyssc_keyss        r   __init__zFastInfo.__init__   s   $	&*#"&

 # $!%   
 IHH,//VVVV788&???? =<<<<	66k666RR'RRRJJt/A/G/G/I/IJJJ"9tD4F4M4M4O4O/P/P#PQQD-788


r   c                     | j         S Nrp   rr   s    r   keyszFastInfo.keysY   s      r   c                 *      fd j         D             S )Nc                 $    g | ]}||         fS r   r   r   rI   rr   s     r   rJ   z"FastInfo.items.<locals>.<listcomp>]   s!    888DG888r   rz   r{   s   `r   rk   zFastInfo.items\   s     8888d&78888r   c                 *      fd j         D             S )Nc                      g | ]
}|         S r   r   r   s     r   rJ   z#FastInfo.values.<locals>.<listcomp>`   s    333AQ333r   rz   r{   s   `r   ro   zFastInfo.values_   s     3333!23333r   Nc                 n    ||                                  v r|| j        v r| j        |         }| |         S |S ry   )r|   rl   )rr   keydefaults      r   getzFastInfo.getb   s?    $))++d((((-9r   c                     t          |t                    s t          dt          |           d          || j        vrt          d| d          || j        v r| j        |         }t          | |          S )Nzkey must be a string not ''z*' not valid key. Examine 'FastInfo.keys()')
isinstancestrKeyErrortyperq   rl   getattrrr   rI   s     r   __getitem__zFastInfo.__getitem__i   s    !S!! 	DBQBBBCCCDJLqLLLMMM""""1%AtQr   c                 .    ||                                  v S ry   )r|   r   s     r   __contains__zFastInfo.__contains__r   s    DIIKKr   c                 D    t          |                                           S ry   )iterr|   r{   s    r   __iter__zFastInfo.__iter__u   s    DIIKK   r   c                 J    dt          |                                           z   S )Nzlazy-loading dict with keys = )r   r|   r{   s    r   __str__zFastInfo.__str__x   s    /#diikk2B2BBBr   c                 *    |                                  S ry   )r   r{   s    r   __repr__zFastInfo.__repr__{   s    ||~~r      c                 l     t          j         fd                                 D             |          S )Nc                 "    i | ]}||         S r   r   r   s     r   rN   z#FastInfo.toJSON.<locals>.<dictcomp>   s    ;;;!1d1g;;;r   )indent)jsondumpsr|   )rr   r   s   ` r   toJSONzFastInfo.toJSON~   s5    z;;;;tyy{{;;;FKKKKr   Fc                    | j         | j                            ddd          | _         | j                                        | _        	 | j        d         }t          j        |d         d         dd	                              | j                  | _	        t          j        |d         d
         dd	                              | j                  | _
        | j
                            d          | _        n$# t          $ r d | _	        d | _
        d | _         w xY w| j         j        r| j         S t
          j                            d                              | j                                                  }|}|t%          j        d          z   t)          j        d          z
  }|r+|                                 r|t)          j        d          z  }| j         j        t1          |          t1          |                   S )N1yFT)periodauto_adjustkeepnacurrentTradingPeriodregularstartr   )unitutcendDUTC   days1d)rR   rQ   historyget_history_metadatarU   pdto_datetime
tz_convertr5   _today_open_today_closeceil_today_midnight	Exceptionempty	Timestampnowdatedatetime	timedeltar   _interval_to_timedelta_exchange_open_nowlocr   )rr   fullDaysOnlyctpdnowd1d0s         r   _get_1y_priceszFastInfo._get_1y_prices   s   ?""i//tW[/\\DOy5577DH	h56#%>#i.2IPSY]#^#^#^#i#ijnjw#x#x $&N3y>%3HsX\$]$]$]$h$himiv$w$w!'+'8'='=c'B'B$$   #' $(!'+$	 ?  	#?"|&&11$-@@EEGG8%1----1Md1S1SS 	5D3355 	5%.t444B"3r773r77?33s   
B,C7 7!Dc                 d    | j         #| j                            dddd          | _         | j         S )N5d1hFTr   intervalr   prepost)rS   rQ   r   r{   s    r   _get_1wk_1h_prepost_pricesz#FastInfo._get_1wk_1h_prepost_prices   s8    &.*.)*;*;4RVdisw*;*x*xD'**r   c                 d    | j         #| j                            dddd          | _         | j         S )Nr   r   Fr   )rT   rQ   r   r{   s    r   _get_1wk_1h_reg_priceszFastInfo._get_1wk_1h_reg_prices   s7    "*&*i&7&7td`eot&7&u&uD#&&r   c                     | j         | j         S |                                  | j                                        | _         | j         S ry   )rU   r   rQ   r   r{   s    r   _get_exchange_metadatazFastInfo._get_exchange_metadata   s?    88O91133xr   c                    t           j                            d          }|                                  |                                 j        d         t          j        d          z   }|t          j        d          z  }||k     }|S )Nr   r   r      )minutes)r   r   r   r   r   indexr   r   )rr   tlast_day_cutoffrs       r   r   zFastInfo._exchange_open_now   s    LU####%%% --//5b9H<NTU<V<V<VV8-b9999 r   c                 x    | j         | j         S | j                                        }|d         | _         | j         S )Nr*   )rV   rQ   r   rr   mds     r   r*   zFastInfo.currency   s8    >%>!Y++--J~r   c                 x    | j         | j         S | j                                        }|d         | _         | j         S )NinstrumentType)rW   rQ   r   r   s     r   r4   zFastInfo.quote_type   s>    '##Y++--./r   c                 j    | j         | j         S |                                 d         | _         | j         S )NexchangeName)rX   r   r{   s    r   r+   zFastInfo.exchange   s2    >%>!4466~F~r   c                 j    | j         | j         S |                                 d         | _         | j         S )Nr-   )rY   r   r{   s    r   r5   zFastInfo.timezone   s3    >%>!44667MN~r   c                    | j         | j         S | j                            t          j                            d                                          t          j        d          z
            }|Lt          |t          j	                  r||j
        d                  }t          |j        d                   | _         | j         S )Nr   i$  r   )r   r   r   )rZ   rQ   get_shares_fullr   r   r   r   	Timedeltar   	DataFramecolumnsintiloc)rr   r6   s     r   r6   zFastInfo.shares   s    <#<**1A1A%1H1H1M1M1O1OPRP\bePfPfPf1f*gg &",// 3q 12v{2//DL|r   c                 t   | j         | j         S |                                 }|j        r&|                                 }d|v r|d         | _         nct	          |d         j        d                   | _         t          j        | j                   r%|                                 }d|v r|d         | _         | j         S )NregularMarketPriceCloser   )r_   r   r   r   floatr   _npisnan)rr   pricesr   s      r   r8   zFastInfo.last_price   s    '##$$&&< 		@,,..B#r))#%&:#; $VG_%9"%=>>Dy)** @0022'2--')*>'?D$r   c                    | j         | j         S |                                 }d}|j        rd}nq|dg                             |j        j                                                  }|j        d         dk     rd}n%t          |d         j	        d                   | _         |rN| j
        j         d}| j
        j        j        /|| j
        j        j        v r| j
        j        j        |         | _         | j         S )NFTr   r      r   )ra   r   r   groupbyr   r   lastshaper   r   rQ   info_quote_retired_info)rr   r   failrI   s       r   r9   zFastInfo.previous_close  s    '##0022< 		CDDWI&..v|/@AAFFHHF|A"" #()=b)A#B#B  	EINNAy-9a49CSCa>a>a#'9#3#A!#D r   c                    | j         | j         S |                                 }|j        d         dk    rL|                                 }|dg                             |j        j                                                  }|j        d         dk     rO| j        j	         d}| j        j
        j        /|| j        j
        j        v r| j        j
        j        |         | _         n%t          |d         j        d                   | _         | j         S )Nr   r   r   r   regularMarketPreviousCloser   )rb   r   r   r   r   r   r   r   rQ   r   r   r   r   r   )rr   r   rI   s      r   r<   z&FastInfo.regular_market_previous_close  s    +''$$&&<?a 0022FWI&..v|/@AAFFHHF<?Q INN,Ay-9a49CSCa>a>a'+y'7'Ea'H$#()=b)A#B#BD ##r   c                     | j         | j         S |                                 }|j        rd | _         nEt          |d         j        d                   | _         t          j        | j                   rd | _         | j         S )Nr   r   )r\   r   r   r   r   r   r   rr   r   s     r   r   zFastInfo.open4  st    :!:$$&&< 	"DJJvf~22677DJy$$ "!
zr   c                     | j         | j         S |                                 }|j        rd | _         nEt          |d         j        d                   | _         t          j        | j                   rd | _         | j         S )NHighr   )r]   r   r   r   r   r   r   r   s     r   r:   zFastInfo.day_highA  st    >%>!$$&&< 	&!DNN"6&>#6r#:;;DNy(( &!%~r   c                     | j         | j         S |                                 }|j        rd | _         nEt          |d         j        d                   | _         t          j        | j                   rd | _         | j         S )NLowr   )r^   r   r   r   r   r   r   r   s     r   r;   zFastInfo.day_lowN  st    =$= $$&&< 	% DMM!&-"4R"899DMy'' % $}r   c                     | j         | j         S |                                 }|j        rd nt          |d         j        d                   | _         | j         S )Nr    r   )r`   r   r   r   r   r   s     r   r=   zFastInfo.last_volume[  sW    ($$$$&&$*LTDDc&:J:OPR:S6T6T  r   c                     | j         | j         S |                     d          }|j        rd | _         nU|j        d         }|dz
  }|}|dk     rd}t	          |d         j        ||                                                   | _         | j         S )NTr   r   2   r   )rc   r   r   r   r   r   meanrr   r   nabs        r   r>   zFastInfo.fifty_day_averagec  s     ,(($$$$77< 	L$(D!!QA"AA1uu$)&/*>qs*C*H*H*J*J$K$KD!$$r   c                     | j         | j         S |                     d          }|j        rd | _         nU|j        d         }|dz
  }|}|dk     rd}t	          |d         j        ||                                                   | _         | j         S )NTr  r      r   )rd   r   r   r   r   r   r  r	  s        r   r?   z FastInfo.two_hundred_day_averageu  s    !-))$$$$77< 		M%)D""QA#AA1uu%*6'?+?!+D+I+I+K+K%L%LD"%%r   c                     | j         | j         S |                     d          }|j        rd | _         nU|j        d         }|dz
  }|}|dk     rd}t	          |d         j        ||                                                   | _         | j         S )NTr  r   
   r    )rh   r   r   r   r   r   r  r	  s        r   r@   zFastInfo.ten_day_average_volume  s    ($$$$$$77< 	G $DQA"AA1uu #F8$4$9!A#$>$C$C$E$E F FD  r   c                 R   | j         | j         S |                     d          }|j        rd | _         nn|j        d         }|t	          j        d          z
  t	          j        d          z   }t          |j        ||df                                                   | _         | j         S )NTr  r   3mor   r    )	ri   r   r   r   r   r   r   r   r  )rr   r   dt1dt0s       r   rA   z#FastInfo.three_month_average_volume  s    ($$$$$$77< 	J $D,r"C4U;;;e>Z[_>`>``C #FJs3w/@$A$F$F$H$H I ID  r   c                     | j         | j         S |                     d          }|j        r|                     d          }t          |d                                                   | _         | j         S )NTr  Fr  )re   r   r   r   maxr   s     r   rB   zFastInfo.year_high  so    ?&?"$$$$77< 	=((e(<<Fv 2 2 4 455r   c                     | j         | j         S |                     d          }|j        r|                     d          }t          |d                                                   | _         | j         S )NTr  Fr  )rf   r   r   r   minr   s     r   rC   zFastInfo.year_low  so    >%>!$$$$77< 	=((e(<<Fve}002233~r   c                 ,   | j         | j         S |                     d          }|j        d         dk    rY|d         j        d         |d         j        d         z
  |d         j        d         z  | _         t	          | j                   | _         | j         S )NTr  r   r   r   r   )rg   r   r   r   r   r   s     r   rD   zFastInfo.year_change  s    ($$$$$$77<?a!'!5b!9F7O<PQR<S!SW]^eWfWklmWn nD %d&7 8 8D  r   c                 p   | j         | j         S 	 | j        }n,# t          $ r}dt          |          v rd }n Y d }~nd }~ww xY w|O| j        j         d}| j        j        j        /|| j        j        j        v r| j        j        j        |         | _         nt          || j	        z            | _         | j         S )NzCannot retrieve share countr/   )
r[   r6   r   r   rQ   r   r   r   r   r8   )rr   r6   erI   s       r   r7   zFastInfo.market_cap  s    :!:	[FF 	 	 	,A66 	 > INNAy-9a49CSCa>a>a!Y-;A>
v788DJzs    
A<Ary   )r   )F)(__name__
__module____qualname__rw   r|   rk   ro   r   r   r   r   r   r   r   r   r   r   r   r   propertyr*   r4   r+   r5   r6   r8   r9   r<   r   r:   r;   r=   r>   r?   r@   rA   rB   rC   rD   r7   r   r   r   r2   r2      s7       89 89 89v! ! !9 9 94 4 4             ! ! !C C C  L L L L4 4 4 44+ + +
' ' '
    .   X     X    X   X   X     X       X . $ $ X$* 
 
 X
 
 
 X
 
 
 X
 ! ! X! % % X%" & & X&$ ! ! X!" ! ! X!   X   X ! ! X!   X  r   r2   c                   P   e Zd ZdedefdZede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fd	            Zedefd
            Zede	j
        fd            Zed             ZdefdZd Zd Zd Zd Zd Zd ZdS )Quotedatar0   c                     || _         || _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _	        d| _
        d| _        d| _        d S )NF)_data_symbol_infor   _sustainability_recommendations_upgrades_downgrades	_calendar_sec_filings_valuation_measures_already_scraped_already_fetched_already_fetched_complementary)rr   r"  r0   s      r   rw   zQuote.__init__  sl    

!# $$(! #'  % %.3+++r   returnc                 n    | j         (|                                  |                                  | j         S ry   )r&  _fetch_info_fetch_complementaryr{   s    r   r   z
Quote.info  s6    :%%'''zr   c                 R   | j         |                     dg          }|t          j                    | _         nh	 |d         d         d         }n9# t          t
          f$ r% t          j        j        s t          d|           w xY wt          j        |          | _         | j         S )N	esgScoresmodulesquoteSummaryresultr   2Failed to parse json response from Yahoo Finance: )
r'  _fetchr   r   r   
IndexErrorr   debughide_exceptionsr
   rr   r9  r"  s      r   sustainabilityzQuote.sustainability  s    '[[+[77F~')|~~$$i!.1(;A>DD *- i i i#>9 )*g_e*g*ghhhi (*|D'9'9$##s   A 6Bc                 j   | j         |                     dg          }|t          j                    | _         nt	 |d         d         d         d         d         }n9# t          t
          f$ r% t          j        j        s t          d|           w xY wt          j        |          | _         | j         S )NrecommendationTrendr6  r8  r9  r   trendr:  )
r(  r;  r   r   r   r<  r   r=  r>  r
   r?  s      r   recommendationszQuote.recommendations  s     ([[*?)@[AAF~(*%%i!.1(;A>?TUV]^DD *- i i i#>9 )*g_e*g*ghhhi )+T(:(:%$$s    A 6Bc                 l   | j         &|                     dg          }|t          j                    | _         n	 |d         d         d         d         d         }t	          |          dk    rt          d| j                   t          j        |          }|                    dd	d
dddd           |                    dd           t          j	        |j
        d          |_
        || _         n9# t          t          f$ r% t          j        j        s t          d|           w xY w| j         S )NupgradeDowngradeHistoryr6  r8  r9  r   r   z'No upgrade/downgrade history found for 	GradeDateFirmToGrade	FromGradeAction)epochGradeDatefirmtoGrade	fromGradeactionT)r   inplace)rQ  r   )r   r:  )r)  r;  r   r   lenr
   r%  rename	set_indexr   r   r   r<  r   r=  r>  )rr   r9  r"  dfs       r   upgrades_downgradeszQuote.upgrades_downgrades  sj   $,[[*C)D[EEF~,.LNN))i!.1(;A>?XYZcdD4yyA~~-.fX\Xd.f.fgggd++BIIfaj  zE  QY  'Z  'Z  dhI  i  i  iLLdL;;;!~bhSAAABH02D-- *- i i i#>9 )*g_e*g*ghhhi ((s   B9C6 66D,c                 F    | j         |                                  | j         S ry   )r*  _fetch_calendarr{   s    r   calendarzQuote.calendar4  s$    >!  """~r   c                 \    | j         |                                 }|i n|| _         | j         S ry   )r+  _fetch_sec_filings)rr   fs     r   sec_filingszQuote.sec_filings:  s5    $''))A&'iQD  r   c                 F    | j         |                                  | j         S ry   )r,  _fetch_valuation_measuresr{   s    r   valuation_measureszQuote.valuation_measuresA  s&    #+**,,,''r   c                      t           S ry   r   r   r   r   valid_moduleszQuote.valid_modulesG  s    **r   r7  c                 6   t          |t                    st          d          d                    d |D                       }t	          |          dk    rt          d          |dd| j        d}	 | j                            t          d	| j         z   |
          }ny# t          j
        j        j        $ r]}t          j        j        s t!          j                                        t'          |          |j        j        z              Y d }~d S d }~ww xY w|S )NzMShould provide a list of modules, see available modules using `valid_modules`,c                 $    g | ]}|t           v |S r   rb  )r   ms     r   rJ   z Quote._fetch.<locals>.<listcomp>O  s#    SSS!!7R2R2RA2R2R2Rr   r   zFNo valid modules provided, see available modules using `valid_modules`zfinance.yahoo.comfalse)r7  
corsDomain	formattedr0   /params)r   rn   r   joinrR  r%  r$  get_raw_json_QUOTE_SUMMARY_URL_	curl_cffirequests
exceptions	HTTPErrorr   r=  r>  r   get_yf_loggererrorr   responsetext)rr   r7  params_dictr9  r  s        r   r;  zQuote._fetchK  s&   '4(( 	omnnn((SSwSSSTTw<<1fggg")9L[bnrnz{{	Z,,-@CUt|CUCU-U^i,jjFF!,6 	 	 	>1 !!''A(@AAA44444		
 s   3,B   D9ADDc                 X   | j         dd}	 | j                            t           d|          }ny# t          j        j        j        $ r]}t          j	        j
        s t          j                                        t          |          |j        j        z              Y d }~d S d }~ww xY w|S )Nrh  )symbolsrj  z/v7/finance/quote?rl  )r%  r$  ro  r   rq  rr  rs  rt  r   r=  r>  r   ru  rv  r   rw  rx  )rr   ry  r9  r  s       r   _fetch_additional_infozQuote._fetch_additional_info\  s    "&,WEE	Z,,-P-P-PYd,eeFF!,6 	 	 	>1 !!''A(@AAA44444		
 s   $1 B'
AB""B'c                 (     j         rd S d _         g d}                     |          }                                 }|||                    |           n|}i }dD ]}||v rt	          ||         d                   dk    rw j        ||         d         d         d<   t           fd|                    |i                               dg           D             d           }|r|                    |           i }|                                D ]Q\  }}	t          |	t                    r0|	                                D ]\  }
}||
d	k    r|d
k    rdn|||
<   J|	|	||<   R|}fdfd|                                D              _        d S )NT)financialDatar,   defaultKeyStatisticsassetProfilesummaryDetailr6  )r8  quoteResponser9  r   r0   c              3   >   K   | ]}|d          j         k    |V  dS )r0   N)r%  )r   r   rr   s     r   	<genexpr>z$Quote._fetch_info.<locals>.<genexpr>x  s?       7 7dH~55 55557 7r   maxAger   iQ c                 |   t          |t                    rd|v rd|v r| dv r|d         n|d         }nt          |t                    rfd|D             }ndt          |t                    r!fd|                                D             }n.t          |t                    r|                    dd          }n|}|S )Nrawfmt>   postMarketTimeregularMarketTimec                 (    g | ]} d |          S ry   r   )r   x_formats     r   rJ   z6Quote._fetch_info.<locals>._format.<locals>.<listcomp>  s%    2221ggdA&&222r   c                 0    i | ]\  }}| ||          S r   r   )r   rI   r  r  s      r   rN   z6Quote._fetch_info.<locals>._format.<locals>.<dictcomp>  s)    ===41aaA===r        )r   dictrn   rk   r   replace)rI   rP   v2r  s      r   r  z"Quote._fetch_info.<locals>._format  s    !T"" 	uzzeqjj!"&M!M!MQuXXSTUZS[At$$ 2222222At$$ ====17799===As## YYvs++Ir   c                 0    i | ]\  }}| ||          S r   r   )r   rI   rP   r  s      r   rN   z%Quote._fetch_info.<locals>.<dictcomp>  s)    GGG41aaAGGGr   )r.  r;  r|  updaterR  r%  nextr   rk   r   r  r&  )rr   r7  r9  additional_infoquery1_infoquote
query_infoprocessed_inforI   rP   k1v1r  s   `           @r   r2  zQuote._fetch_infog  s     	F $iiiW--5577&6+=MM/****$F6 		3 		3E3ve}X'>#?#?!#C#C7;|uh'*84!7 7 7 7fjj&;&;&?&?"&M&M 7 7 7 

  3&&z222 %%'' 		& 		&DAq !T"" &ggii Y YFB~68HnnqUUVXr*Y $%q!$	 	 	 	 	 HGGG;3D3D3F3FGGG


r   c                 :   d| j          d}	 | j                            |          }nk# t          $ r^}t          j        j        s t          j                    	                    d|            t          j                    | _        Y d }~d S d }~ww xY w	 t          |j        d          }|                    d          }|t          j                    | _        d S d |                    d                              d	d
g          D             }g }|                    d          dd          D ]8}d |                    d	d
g          D             }	|                    |	           9t          j        ||          }
|
                    |
j        d                   }
d |
j        _        |
| _        d S # t          $ r^}t          j        j        s t          j                    	                    d|            t          j                    | _        Y d }~d S d }~ww xY w)Nz https://finance.yahoo.com/quote/z/key-statisticsurlz%Failed to fetch key-statistics page: zhtml.parsertablec                 :    g | ]}|                     d           S T)stripget_text)r   ths     r   rJ   z3Quote._fetch_valuation_measures.<locals>.<listcomp>  s&    aaa2r{{{..aaar   trr  tdr   c                 :    g | ]}|                     d           S r  r  )r   r  s     r   rJ   z3Quote._fetch_valuation_measures.<locals>.<listcomp>  s&    UUUR400UUUr   )r   r   z%Failed to parse key-statistics page: )r%  r$  	cache_getr   r   r=  r>  r   ru  rv  r   r   r,  r   rx  findfind_allappendrT  r   r   name)rr   r  rw  r  soupr  headersrowsr  cellsrU  s              r   r_  zQuote._fetch_valuation_measures  s0   NNNN	z+++44HH 	 	 	>1 !!''(SPQ(S(STTT')|~~D$FFFFF		6 >>DIIg&&E}+-<>>(aaD9I9I9R9RTXZ^S_9`9`aaaGDnnT**122. # #UU2;;d|;T;TUUUE""""dG444Bbjm,,B BHM')D$$$ 	6 	6 	6>1 !!''(SPQ(S(STTT')|~~D$$$$$$$		6s6   ) 
BABBAF2 CF2 2
H<AHHc                    | j         rd S d| _         |                                  | j        d S dh}|rd| j         d| j         }|D ]
}|d|z   z  }t          j                            d                              d          t          j	        d	          z
  }t          |                                          }t          j                            d                              d          }t          |                                          }|d
| d| z  }| j                            |          j        }t!          j        |          }|                    d          p|                    d          }|d         %t'          dt)          |d                   z             |D ]C}|d         d         }	||	v r#|	|         d         d         d         | j        |<   7d | j        |<   Bd S d S )NTtrailingPegRatiozRhttps://query1.finance.yahoo.com/ws/fundamentals-timeseries/v1/finance/timeseries/z?symbol=z&type=r   r      r   z	&period1=z	&period2=r  
timeseriesfinancerv  r:  r9  r   r   reportedValuer  )r/  r2  r&  r%  r   r   r   floorr   r   r   	timestampr   r$  r  rx  r   loadsr   r   r   r   )
rr   r|   r  rI   r   r   json_str	json_datajson_resultkeydicts
             r   r3  zQuote._fetch_complementary  s#   . 	F.2+:F ## +	(. Lgkgs  L  L  ~B  ~J  L  LC $ $x!|#L$$U++11#669KQY9Z9Z9ZZE))**E,""5))..s33Ccmmoo&&C4u44s444Cz+++449H
8,,I#--55Qy9Q9QK7#/!"VY\]hip]qYrYr"rsss ( (%h/2<<$+AJrN?$CE$JDJqMM#'DIaLLW+	( +	(L( (r   c                    |                      dg          }|	i | _        d S 	 t                      | _        |d         d         d         d         }d|v r?t          j                            |d                                                   | j        d<   d|v r?t          j                            |d                                                   | j        d	<   |                    d
          }|d |                    dg           D             | j        d<   |                    dd           | j        d<   |                    dd           | j        d<   |                    dd           | j        d<   |                    dd           | j        d<   |                    dd           | j        d<   |                    dd           | j        d<   d S d S # t          t          f$ r% t          j
        j        s t          d|           w xY w)NcalendarEventsr6  r8  r9  r   dividendDatezDividend DateexDividendDatezEx-Dividend Dateearningsc                 p    g | ]3}t           j                             |                                          4S r   )r   fromtimestampr   )r   ds     r   rJ   z)Quote._fetch_calendar.<locals>.<listcomp>  sI      3H  3H  3Hab83D3R3RST3U3U3Z3Z3\3\  3H  3H  3Hr   earningsDatezEarnings DateearningsHighzEarnings HighearningsLowzEarnings LowearningsAveragezEarnings AveragerevenueHighzRevenue High
revenueLowzRevenue LowrevenueAveragezRevenue Averager:  )r;  r*  r  r   r  r   r   r   r<  r   r=  r>  r
   )rr   r9  _eventsr  s       r   rX  zQuote._fetch_calendar  s-   &6%788>DNF	a!VVDN^,X6q9:JKG((2:2C2Q2QRYZhRi2j2j2o2o2q2q/7**5=5F5T5TU\]mUn5o5o5t5t5v5v12{{:..H# 3H  3Hfnfrfr  tB  DF  gG  gG  3H  3H  3H/2:,,~t2T2T/19mT1R1R~.5=\\BSUY5Z5Z1219mT1R1R~.08\40P0P}-4<LLAQSW4X4X0111 $# *% 	a 	a 	a>1 !"_W]"_"_```	as   F&G 6Hc                 .   |                      dg          }|d S |d         d         d         d         d         }|D ]V}d|v rd |d         D             |d<   t          j                            |d	         d
                                          |d	<   W|S )N
secFilingsr6  r8  r9  r   filingsexhibitsc                 ,    i | ]}|d          |d         S )r   r  r   )r   r  s     r   rN   z,Quote._fetch_sec_filings.<locals>.<dictcomp>"  s"     K K K61U8 K K Kr   r   z%Y-%m-%d)r;  r   strptimer   )rr   r9  r  r\  s       r   r[  zQuote._fetch_sec_filings  s    l^44>4(215lCIN  	Q 	QAQ K KQz] K K K* )221V9jIINNPPAfII$ r   N)r  r  r  r	   r   rw   r  r  r   r   r   r@  rD  rV  rY  r]  r`  staticmethodrc  rn   r;  r|  r2  r_  r3  rX  r[  r   r   r   r!  r!    s       4V 4S 4 4 4 4" d    X $ $ $ $ X$ % % % % X% )R\ ) ) ) X)* $    X
 !T ! ! ! X! (BL ( ( ( X(
 + + \+d    "	 	 	7H 7H 7Hr 6  6  6D6( 6( 6(pa a a<    r   r!  )rq  r   r   numpyr   pandasr   bs4r   yfinancer   yfinance.configr   yfinance.constr   r   r   yfinance.datar	   yfinance.exceptionsr
   r   info_retired_keys_pricer  info_retired_keys_exchangeinfo_retired_keys_marketCapinfo_retired_keys_symbolinfo_retired_keysrp  r2   r!  r   r   r   <module>r     s                             $ $ $ $ $ $ P P P P P P P P P P             < < < < < < < <ppp    }};|}}} ~ ~ ~      X   X   X  Y  Y  Y   bbb c c cwww *m $: +.HHKff  jB  B  $>>> F F F F F F F FRQ Q Q Q Q Q Q Q Q Qr   