a
    bg                     @   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	e
edddZeee d	d
dZeee d	ddZeee d	ddZeeee dddZeeeed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
   ZPOLYGON_API_KEYr   )clsr   r
    r   s/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain_community/utilities/polygon.pyvalidate_environment   s
    z&PolygonAPIWrapper.validate_environment)tickerr   c                 C   sV   t  d| d| j }t|}| }|dd}|dvrJt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OKZSTOCKBUSINESSZSTOCKSBUSINESSAPI Error: resultsPOLYGON_BASE_URLr
   requestsgetjson
ValueErrorselfr   urlresponsedatar   r   r   r   get_financials    s    
z PolygonAPIWrapper.get_financialsc                 C   sV   t  d| d| j }t|}| }|dd}|dvrJtd| |ddS )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   sV   t  d| d| j }t|}| }|dd}|dvrJtd| |ddS )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   s    
z!PolygonAPIWrapper.get_ticker_news)r   kwargsr   c                 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rt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dayZ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*   
multiplierr-   r.   r/   r0   r"   r#   r$   r   r   r   r   get_aggregatesZ   s<    
z PolygonAPIWrapper.get_aggregates)r   r   r)   r   c                 K   s|   |dkrt | |S |dkr0t | |S |dkrHt | |S |dkrht | j|fi |S td| dd S )Nr%   r'   r(   r4   zInvalid mode z for Polygon API.)r   dumpsr%   r'   r(   r4   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(   r4   r6   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   r   <module>   s   