o
    ȳg                     @   s\   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
mZ dZG dd de
ZdS )	zs
Util that calls several of Polygon's stock market REST APIs.
Docs: https://polygon.io/docs/stocks/getting-started
    N)AnyDictOptionalget_from_dict_or_env)	BaseModelmodel_validatorzhttps://api.polygon.io/c                   @   s   e Zd ZU dZdZee ed< edde	de
defdd	Zd
edee fddZd
edee fddZd
edee fddZd
ededee fddZded
ededefddZdS )PolygonAPIWrapperzWrapper for Polygon API.Npolygon_api_keybefore)modevaluesreturnc                 C   s   t |dd}||d< |S )z%Validate that api key in environment.r
   POLYGON_API_KEYr   )clsr   r
    r   a/var/www/html/chatdoc2/venv/lib/python3.10/site-packages/langchain_community/utilities/polygon.pyvalidate_environment   s
   z&PolygonAPIWrapper.validate_environmenttickerc                 C   V   t  d| d| j }t|}| }|dd}|dvr%td| |ddS )z
        Get fundamental financial data, which is found in balance sheets,
        income statements, and cash flow statements for a given ticker.

        /vX/reference/financials
        zvX/reference/financials?ticker=&apiKey=statusNOKSTOCKBUSINESSSTOCKSBUSINESSAPI Error: resultsPOLYGON_BASE_URLr
   requestsgetjson
ValueErrorselfr   urlresponsedatar   r   r   r   get_financials       
z PolygonAPIWrapper.get_financialsc                 C   r   )zw
        Get the most recent National Best Bid and Offer (Quote) for a ticker.

        /v2/last/nbbo/{ticker}
        zv2/last/nbbo/?apiKey=r   Nr   r   r   r   r$   r   r   r   get_last_quote5   s   
z PolygonAPIWrapper.get_last_quotec                 C   r   )z
        Get the most recent news articles relating to a stock ticker symbol,
        including a summary of the article and a link to the original source.

        /v2/reference/news
        zv2/reference/news?ticker=r   r   Nr   r   r   r   r$   r   r   r   get_ticker_newsE   r*   z!PolygonAPIWrapper.get_ticker_newskwargsc                 K   s   | dd}| dd}| dd}| dd}| dd	}| d
d}t d| d| d| d| d| d| j d| d| }	t |	}
|
 }| dd}|dvr[td| | ddS )z
        Get aggregate bars for a stock over a given date range
        in custom time window sizes.

        /v2/aggs/ticker/{ticker}/range/{multiplier}/{timespan}/{from_date}/{to_date}
        timespandaytimespan_multiplier   	from_dateNto_dateadjustedTsortasczv2/aggs/ticker/z/range//r+   z
&adjusted=z&sort=r   r   r   r   )r!   r   r
   r    r"   r#   )r%   r   r.   r/   
multiplierr3   r4   r5   r6   r&   r'   r(   r   r   r   r   get_aggregatesZ   s<   
z PolygonAPIWrapper.get_aggregatesr   c                 K   sx   |dkrt | |S |dkrt | |S |dkr$t | |S |dkr4t | j|fi |S td| d)Nr)   r,   r-   r:   zInvalid mode z for Polygon API.)r"   dumpsr)   r,   r-   r:   r#   )r%   r   r   r.   r   r   r   run|   s   zPolygonAPIWrapper.run)__name__
__module____qualname____doc__r
   r   str__annotations__r   classmethodr   r   r   dictr)   r,   r-   r:   r<   r   r   r   r   r	      s   
 	"r	   )r@   r"   typingr   r   r   r    langchain_core.utilsr   pydanticr   r   r   r	   r   r   r   r   <module>   s    