U
    ™ÀÂhû  ã                   @   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)Ú	BaseModel)Úget_from_dict_or_envz!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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 |Ž t|ddƒ| _d S )Nr   ZFINANCIAL_DATASETS_API_KEY)ÚsuperÚ__init__r   r   )Úselfr	   ©Ú	__class__© úT/tmp/pip-unpacked-wheel-9gdii04g/langchain_community/utilities/financial_datasets.pyr      s      ÿz$FinancialDatasetsAPIWrapper.__init__)ÚtickerÚperiodÚlimitÚreturnc                 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_sheets:   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_statementsY   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%   Ú
ValueError)r   r&   r   r'   r   r   r   r   r   Úruny   s    zFinancialDatasetsAPIWrapper.run)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   ÚstrÚ__annotations__r   r   ÚintÚdictr#   r   r$   r%   r*   Ú__classcell__r   r   r   r   r      s&   
û!û!û r   )r.   r   Útypingr   r   r   r   Zlangchain_core.pydantic_v1r   Zlangchain_core.utilsr   r   r   r   r   r   r   Ú<module>   s   