a
    bŠÝgô  ã                   @   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< edœ‡ fdd„Z	e
edœdd	„ƒZeeee ee d
œdd„Zeeee ee d
œdd„Zeeee ee d
œdd„Zeeeedœdd„Z‡  ZS )ÚFinancialDatasetsAPIWrapperz#Wrapper for financial datasets API.NÚfinancial_datasets_api_key)Údatac                    s$   t ƒ jf i |¤Ž t|ddƒ| _d S )Nr   ZFINANCIAL_DATASETS_API_KEY)ÚsuperÚ__init__r   r   )Úselfr	   ©Ú	__class__© ú~/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/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Úlimitr   c                 C   sN   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'   s    ÿþ
ýÿ
z1FinancialDatasetsAPIWrapper.get_income_statementsc                 C   sN   t › d|› d|› d|r|nd› }d| ji}tj||d}| ¡ }| 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   Zbalance_sheetsNr   r"   r   r   r   Úget_balance_sheetsF   s    ÿþ
ýÿ
z.FinancialDatasetsAPIWrapper.get_balance_sheetsc                 C   sN   t › d|› d|› d|r|nd› }d| ji}tj||d}| ¡ }| 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   Zcash_flow_statementsNr   r"   r   r   r   Úget_cash_flow_statementse   s    ÿþ
ýÿ
z4FinancialDatasetsAPIWrapper.get_cash_flow_statements)Úmoder   Úkwargsr   c                 K   s°   |dkr4|  dd¡}|  dd¡}t |  |||¡¡S |dkrh|  dd¡}|  dd¡}t |  |||¡¡S |dkrœ|  dd¡}|  dd¡}t |  |||¡¡S td|› d	ƒ‚d S )
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      s*   
û!û!û r   )r/   r!   Útypingr   r   r   r   Zlangchain_core.utilsr   Zpydanticr   r   r   r   r   r   r   Ú<module>   s   