o
    ®©Zhô  ã                   @   sX   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„ de
ƒZdS )	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                	       sÊ   e Zd ZU dZdZee ed< def‡ fdd„Z	e
defdd	„ƒZd
ededee dee fdd„Zd
ededee dee fdd„Zd
ededee dee fdd„Zded
ededefdd„Z‡  ZS )ÚFinancialDatasetsAPIWrapperz#Wrapper for financial datasets API.NÚfinancial_datasets_api_keyÚdatac                    s$   t ƒ jdi |¤Ž t|ddƒ| _d S )Nr   ZFINANCIAL_DATASETS_API_KEY© )ÚsuperÚ__init__r   r   )Úselfr	   ©Ú	__class__r
   úg/var/www/html/lang_env/lib/python3.10/site-packages/langchain_community/utilities/financial_datasets.pyr      s   
ÿz$FinancialDatasetsAPIWrapper.__init__Úreturnc                 C   s   | j d u r	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   r
   r
   r   Ú_api_key   s
   
ÿz$FinancialDatasetsAPIWrapper._api_keyÚtickerÚperiodÚlimitc                 C   óN   t › d|› d|› d|r|nd› }d| ji}tj||d}| ¡ }| 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©ÚheadersZincome_statementsN©ÚFINANCIAL_DATASETS_BASE_URLr   ÚrequestsÚgetÚjson©r   r   r   r   Úurlr   Úresponser	   r
   r
   r   Úget_income_statements'   ó   ÿþ
ýÿ
z1FinancialDatasetsAPIWrapper.get_income_statementsc                 C   r   )	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   Zbalance_sheetsNr   r#   r
   r
   r   Úget_balance_sheetsF   r'   z.FinancialDatasetsAPIWrapper.get_balance_sheetsc                 C   r   )	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   Zcash_flow_statementsNr   r#   r
   r
   r   Úget_cash_flow_statementse   s   ÿþ
ýÿ
z4FinancialDatasetsAPIWrapper.get_cash_flow_statementsÚmodeÚkwargsc                 K   s¬   |dkr|  dd¡}|  dd¡}t |  |||¡¡S |dkr4|  dd¡}|  dd¡}t |  |||¡¡S |dkrN|  dd¡}|  dd¡}t |  |||¡¡S td|› d	ƒ‚)
Nr&   r   Zannualr   r   r(   r)   zInvalid mode z for financial datasets API.)r!   r"   Údumpsr&   r(   r)   r   )r   r*   r   r+   r   r   r
   r
   r   Úrun…   s   zFinancialDatasetsAPIWrapper.run)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   ÚstrÚ__annotations__r   r   Úpropertyr   ÚintÚdictr&   r   r(   r)   r-   Ú__classcell__r
   r
   r   r   r      sD   
 þýü
ûþýü
ûþýü
û" r   )r1   r"   Útypingr   r   r   r    Zlangchain_core.utilsr   Zpydanticr   r   r   r
   r
   r
   r   Ú<module>   s    