
    dh                     ^    S r SSKrSSKJrJrJr  SSKrSSKJr  SSK	J
r
  Sr " S S\
5      rg)	zp
Util that calls several of financial datasets stock market REST APIs.
Docs: https://docs.financialdatasets.ai/
    N)AnyListOptional)get_from_dict_or_env)	BaseModelz!https://api.financialdatasets.ai/c            	          ^  \ rS rSr% SrSr\\   \S'   S\	4U 4S jjr
\S\4S j5       rS	\S
\S\\   S\\   4S jrS	\S
\S\\   S\\   4S jrS	\S
\S\\   S\\   4S jrS\S	\S\	S\4S jrSrU =r$ )FinancialDatasetsAPIWrapper   z#Wrapper for financial datasets API.Nfinancial_datasets_api_keydatac                 J   > [         TU ]  " S0 UD6  [        USS5      U l        g )Nr   FINANCIAL_DATASETS_API_KEY )super__init__r   r   )selfr   	__class__s     h/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/utilities/financial_datasets.pyr   $FinancialDatasetsAPIWrapper.__init__   s)     4 *>.0L+
'    returnc                 J    U R                   c  [        S5      eU R                   $ )Na#  API key is required for the FinancialDatasetsAPIWrapper. Please provide the API key by either:
1. Manually specifying it when initializing the wrapper: FinancialDatasetsAPIWrapper(financial_datasets_api_key='your_api_key')
2. Setting it as an environment variable: FINANCIAL_DATASETS_API_KEY)r   
ValueError)r   s    r   _api_key$FinancialDatasetsAPIWrapper._api_key   s/    **2W  ...r   tickerperiodlimitc                     [          SU SU SU(       a  UOS 3nSU R                  0n[        R                  " XES9nUR	                  5       nUR                  SS5      $ )	a>  
Get the income statements for a stock `ticker` over a `period` of time.

:param ticker: the stock ticker
:param period: the period of time to get the balance sheets for.
    Possible values are: annual, quarterly, ttm.
:param limit: the number of results to return, default is 10
:return: a list of income statements
z%financials/income-statements/?ticker=&period=&limit=
   	X-API-KEYheadersincome_statementsNFINANCIAL_DATASETS_BASE_URLr   requestsgetjsonr   r   r   r   urlr%   responser   s           r   get_income_statements1FinancialDatasetsAPIWrapper.get_income_statements'   sn      ++ ,hvhue"-/ 	 . <<5}}xx+T22r   c                     [          SU SU SU(       a  UOS 3nSU R                  0n[        R                  " XES9nUR	                  5       nUR                  SS5      $ )	a8  
Get the balance sheets for a stock `ticker` over a `period` of time.

:param ticker: the stock ticker
:param period: the period of time to get the balance sheets for.
    Possible values are: annual, quarterly, ttm.
:param limit: the number of results to return, default is 10
:return: a list of balance sheets
z"financials/balance-sheets/?ticker=r    r!   r"   r#   r$   balance_sheetsNr'   r,   s           r   get_balance_sheets.FinancialDatasetsAPIWrapper.get_balance_sheetsF   sn      ++ ,hvhue"-/ 	 . <<5}}xx($//r   c                     [          SU SU SU(       a  UOS 3nSU R                  0n[        R                  " XES9nUR	                  5       nUR                  SS5      $ )	aD  
Get the cash flow statements for a stock `ticker` over a `period` of time.

:param ticker: the stock ticker
:param period: the period of time to get the balance sheets for.
    Possible values are: annual, quarterly, ttm.
:param limit: the number of results to return, default is 10
:return: a list of cash flow statements
z(financials/cash-flow-statements/?ticker=r    r!   r"   r#   r$   cash_flow_statementsNr'   r,   s           r   get_cash_flow_statements4FinancialDatasetsAPIWrapper.get_cash_flow_statementse   sn    " ++ ,hvhue"-/ 	 . <<5}}xx.55r   modekwargsc                     US:X  aJ  UR                  SS5      nUR                  SS5      n[        R                  " U R                  X$U5      5      $ US:X  aJ  UR                  SS5      nUR                  SS5      n[        R                  " U R	                  X$U5      5      $ US:X  aJ  UR                  SS5      nUR                  SS5      n[        R                  " U R                  X$U5      5      $ [        SU S	35      e)
Nr/   r   annualr   r"   r3   r7   zInvalid mode z for financial datasets API.)r*   r+   dumpsr/   r3   r7   r   )r   r9   r   r:   r   r   s         r   runFinancialDatasetsAPIWrapper.run   s    **ZZ(3FJJw+E::d88OPP))ZZ(3FJJw+E::d55feLMM//ZZ(3FJJw+E::d;;FERSS}TF2NOPPr   )r   )__name__
__module____qualname____firstlineno____doc__r   r   str__annotations__r   r   propertyr   intdictr/   r   r3   r7   r>   __static_attributes____classcell__)r   s   @r   r	   r	      s   -044
s 
 	/# 	/ 	/33 3 }	3
 
$3>00 0 }	0
 
d0>66 6 }	6
 
d6@Q QS QC QC Q Qr   r	   )rD   r+   typingr   r   r   r)   langchain_core.utilsr   pydanticr   r(   r	   r   r   r   <module>rO      s4   
  & &  5 A CQ) CQr   