
    U>qj                          d dl Z d dlZd dlZ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mZ  G d d      Z G d d	      Zy)
    N)utilsconst)YfConfig)YfData)YFExceptionYFNotImplementedErrorc                   n    e Zd ZdedefdZed	d       Zedefd       Z	ede
j                  fd       Zy)
Fundamentalsdatasymbolc                     || _         || _        d | _        d | _        d | _        d | _        d | _        d| _        t        ||      | _        y )NF)	_data_symbol	_earnings_financials_shares_financials_data_fin_data_quote_basics_already_scraped
Financialsselfr   r   s      ]/opt/rentech/trading_bot/.venv/lib/python3.12/site-packages/yfinance/scrapers/fundamentals.py__init__zFundamentals.__init__   sM    
 $#',$%dF3    returnc                     | j                   S N)r   r   s    r   
financialszFundamentals.financials   s    r   c                 8    t        j                  dt               y )Nzf'Ticker.earnings' is deprecated as not available via API. Look for "Net Income" in Ticker.income_stmt.)warningswarnDeprecationWarningr   s    r   earningszFundamentals.earnings   s      A  CU  	Vr   c                 H    | j                   t        d      | j                   S )Nshares)r   r   r   s    r   r'   zFundamentals.shares$   s!    <<'11||r   N)r   r   )__name__
__module____qualname__r   strr   propertyr    dictr%   pd	DataFramer'    r   r   r
   r
      sc    4V 4S 4     $     r   r
   c            
           e Zd ZdedefdZddej                  fdZddej                  fdZ	ddej                  fdZ
ej                  d        Zd	 Zd
Zdedej                  fdZdededededef
dZdedefdZy)r   r   r   c                 J    || _         || _        i | _        i | _        i | _        y r   )r   r   _income_time_series_balance_sheet_time_series_cash_flow_time_seriesr   s      r   r   zFinancials.__init__,   s(    
#% *,'&(#r   r   c                 V    | j                   }||vr| j                  d|      ||<   ||   S )Nincome)r3   _fetch_time_seriesr   freqress      r   get_income_time_seriesz!Financials.get_income_time_series3   s4    &&s?//$?CI4yr   c                 V    | j                   }||vr| j                  d|      ||<   ||   S )Nbalance-sheet)r4   r8   r9   s      r   get_balance_sheet_time_seriesz(Financials.get_balance_sheet_time_series9   s4    --s?//FCI4yr   c                 V    | j                   }||vr| j                  d|      ||<   ||   S )N	cash-flow)r5   r8   r9   s      r   get_cash_flow_time_seriesz$Financials.get_cash_flow_time_series?   s4    ))s?//TBCI4yr   c                    g d}g d}||vrt        d|       ||vrt        d|       |dk(  r|dvrt        d      	 | j                  ||      }||S 	 t        j                         S # t        $ rm}t        j                  j
                  s t        j                         j                  | j                   d| d	|        Y d }~t        j                         S d }~ww xY w)
N)r7   r>   rA   yearly	quarterlytrailingz'Illegal argument: name must be one of: z,Illegal argument: timescale must be one of: rG   )r7   rA   zSIllegal argument: frequency 'trailing' only available for cash-flow or income data.z: Failed to create z financials table for reason: )
ValueError_create_financials_tabler   r   debughide_exceptionsr   get_yf_loggererrorr   r.   r/   )r   name	timescaleallowed_namesallowed_timescales	statementes          r   r8   zFinancials._fetch_time_seriesE   s    A@}$F}oVWW..KL^K_`aa
"t3J'J M N N	u55dIFI$   % ||~	  	u>>11!''4<<.8KD6Qopqor(stt||~		us   A- -	C#6ACC#c                     |dk(  rd}t         j                  |   }	 | j                  ||      S # t        $ r t        j
                  j                  s Y y w xY w)Nr7   r    )r   fundamentals_keys_get_financials_time_series	Exceptionr   rJ   rK   )r   rN   rO   keyss       r   rI   z#Financials._create_financials_tablea   sY    8D&&t,	33ItDD 	>>11	s   . $AA<   rX   c                 @   dddd}||   }t        j                   ddd      }t        j                  j                  d      j	                  d	      }d
t        |j                                dt        |j                                }d| j                   d| j                   }|dz   dj                  |D cg c]  }||z   	 c}      z   |z   }	| j                  j                  r| j                  ||||      }
n	 | j                  |	      }
|
D ]  }|j'                  dd         t)               }i }|
D ]9  }|j+                         D ]$  }|dk(  r|j-                  ||          ||   ||<   & ; t/        t1        |            }t        j2                  |d      }t        j4                  |t1        |j+                                     }|j7                         D ]Y  \  }}|t        j4                  ||g      }|D ci c]!  }t        j                  |d         |d   d   # c}|j8                  |<   [ |j:                  j<                  j?                  d|z   dd      |_        |j@                  D ]  }||   jC                  d      ||<    |jE                  |D cg c]  }||j:                  v s| c}      }|t/        |j@                  d          }|dk(  r|jF                  d d d!gf   }|S c c}w # t        $ r}t        j                         j!                  | j                   dt#        |      j$                   d       d| j                  _
        	 | j                  ||||      }
n# t        $ r d| j                  _
         w xY wY d }~d }~ww xY wc c}w c c}w )"NannualrF   rG   rD   i        UTCDz	&period1=z	&period2=zRhttps://query2.finance.yahoo.com/ws/fundamentals-timeseries/v1/finance/timeseries/z?symbol=&type=,z(: single-URL fundamentals fetch failed (zC); falling back to chunked requests for this and subsequent fetchesTFmeta	timestamps)unit)columnsindexasOfDatereportedValueraw^ )regexfloat)reverser   )$datetimer.   	Timestampnowceilintrc   r   joinr   fundamentals_use_chunked_fetch_fundamentals_chunked_fetch_fundamentals_payloadrW   r   rL   rJ   typer(   popsetrX   updatesortedlistto_datetimer/   itemslocrg   r+   replacerf   astypereindexiloc)r   rO   rX   timescale_translationstart_dtend	period_qsts_url_basekfull_urldata_rawrS   d
timestampsdata_unpackedxdatesdfvs                      r   rV   z&Financials._get_financials_time_seriest   s   +3+[e f))4	 $$T2r2llu%**3/H$6$6$8 9:)CDXCYZ	jkokwkwjx  yA  BF  BN  BN  AO  P)CHHT5Ri!m5R,SSV__ ::..77YPTV_`H;;HE  	 AEE&$	 
 U
 	,AVVX ,#%%ad+'(tM!$	,	, D,-
z4\\%tM4F4F4H/IJ!'') 	\DAqz\\%s;YZ[TUa
m4a6H6OO[BFF1I	\
 88<<''i4'H  	*AqELL)BqE	* ZZD:qAM:;rzz401 #QCB	w 6S  
##%++||n$LTRSWM]M]L^ _W X 7;

3#??YX\^ghH  :?DJJ7 
> \ ;sI   6K.
:K3 ;&NN.N3	N<ANM)(N)NNNr   rO   r   c           	         g }t        dt        |      | j                        D ]_  }|||| j                  z    }|dz   dj                  |D cg c]  }||z   	 c}      z   |z   }	|j	                  | j                  |	             a |S c c}w )Nr   r`   ra   )rangelen_CHUNK_KEYSru   extendrx   )
r   r   rO   rX   r   r   ichunkr   	chunk_urls
             r   rw   z&Financials._fetch_fundamentals_chunked   s    q#d)T%5%56 	IA1t///0E#h.RW:XQ9q=:X1YY\eeIOOD<<YGH	I  ;Ys   Burlc                     | j                   j                  |      j                  }t        j                  |      }|j                  d      xs i j                  d      }|st        d      |S )zFetch a fundamentals-timeseries URL and return the parsed `result`
        list. Raises if Yahoo returns an empty / error payload (callers can
        catch and fall back to chunked requests).)r   
timeseriesresultz$Empty fundamentals-timeseries result)r   	cache_gettextjsonloadsgetr   )r   r   json_str	json_datar   s        r   rx   z&Financials._fetch_fundamentals_payload   sa     ::''C'055JJx(	---388BDEEr   N)rE   )r(   r)   r*   r   r+   r   r.   r/   r<   r?   rB   r   log_indent_decoratorr8   rI   r   r~   rV   rw   rx   r0   r   r   r   r   +   s    )V )S )r|| bll ",,    6" KE4 EBLL ENs s RV cf ko 	s 	t 	r   r   )rp   r   r"   pandasr.   yfinancer   r   yfinance.configr   yfinance.datar   yfinance.exceptionsr   r   r
   r   r0   r   r   <module>r      s3        ! $   B >a ar   