
    7|h                     ^    d Z ddlZddlmZmZmZ ddlZddlmZ ddl	m
Z
 dZ G d de
      Zy)	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            	            e Zd ZU dZdZee   ed<   def fdZ	e
defd       Zded	ed
ee   dee   fdZded	ed
ee   dee   fdZded	ed
ee   dee   fdZdedededefdZ xZS )FinancialDatasetsAPIWrapperz#Wrapper for financial datasets API.Nfinancial_datasets_api_keydatac                 H    t        |   di | t        |dd      | _        y )Nr
   FINANCIAL_DATASETS_API_KEY )super__init__r   r
   )selfr   	__class__s     o/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain_community/utilities/financial_datasets.pyr   z$FinancialDatasetsAPIWrapper.__init__   s)     4 *>.0L+
'    returnc                 H    | j                   t        d      | j                   S )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_keyz$FinancialDatasetsAPIWrapper._api_key   s/    **2W  ...r   tickerperiodlimitc                     t          d| d| d|r|nd }d| j                  i}t        j                  ||      }|j	                         }|j                  dd      S )	av  
        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_statementsz1FinancialDatasetsAPIWrapper.get_income_statements'   sp      ++ ,hvhue"-/ 	 . <<W5}}xx+T22r   c                     t          d| d| d|r|nd }d| j                  i}t        j                  ||      }|j	                         }|j                  dd      S )	ap  
        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_sheetsz.FinancialDatasetsAPIWrapper.get_balance_sheetsF   sp      ++ ,hvhue"-/ 	 . <<W5}}xx($//r   c                     t          d| d| d|r|nd }d| j                  i}t        j                  ||      }|j	                         }|j                  dd      S )	a|  
        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_statementsz4FinancialDatasetsAPIWrapper.get_cash_flow_statementse   sp    " ++ ,hvhue"-/ 	 . <<W5}}xx.55r   modekwargsc                    |dk(  rJ|j                  dd      }|j                  dd      }t        j                  | j                  |||            S |dk(  rJ|j                  dd      }|j                  dd      }t        j                  | j	                  |||            S |dk(  rJ|j                  dd      }|j                  dd      }t        j                  | j                  |||            S t        d| d	      )
Nr,   r   annualr   r   r/   r2   zInvalid mode z for financial datasets API.)r'   r(   dumpsr,   r/   r2   r   )r   r3   r   r4   r   r   s         r   runzFinancialDatasetsAPIWrapper.run   s    **ZZ(3FJJw+E::d88OPP))ZZ(3FJJw+E::d55ffeLMM//ZZ(3FJJw+E::d;;FFERSS}TF2NOPPr   )__name__
__module____qualname____doc__r
   r   str__annotations__r   r   propertyr   intdictr,   r   r/   r2   r8   __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r   r	   )r<   r(   typingr   r   r   r&   langchain_core.utilsr   pydanticr   r%   r	   r   r   r   <module>rF      s4   
  & &  5 A CQ) CQr   