
    dh                     b    S r SSKrSSKJrJrJr  SSKrSSKJr  SSK	J
r
Jr  Sr " S S\
5      rg)	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                       \ rS rSr% SrSr\\   \S'   \	" SS9\
S\S\4S	 j5       5       rS
\S\\   4S jrS
\S\\   4S jrS
\S\\   4S jrS
\S\S\\   4S jrS\S
\S\S\4S jrSrg)PolygonAPIWrapper   zWrapper for Polygon API.Npolygon_api_keybefore)modevaluesreturnc                 (    [        USS5      nX!S'   U$ )z%Validate that api key in environment.r   POLYGON_API_KEYr   )clsr   r   s      ]/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/utilities/polygon.pyvalidate_environment&PolygonAPIWrapper.validate_environment   s'     /%'8
 %4 !    tickerc                     [          SU SU R                   3n[        R                  " U5      nUR	                  5       nUR                  SS5      nUS;  a  [        SU 35      eUR                  SS5      $ )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   s         r   get_financials PolygonAPIWrapper.get_financials            !X **+- 	
 <<$}}(D)BB{4&122xx	4((r   c                     [          SU SU R                   3n[        R                  " U5      nUR	                  5       nUR                  SS5      nUS;  a  [        SU 35      eUR                  SS5      $ )z_
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)   s         r   get_last_quote PolygonAPIWrapper.get_last_quote5   sw     ""-xx@T@T?UV<<$}}(D)BB{4&122xx	4((r   c                     [          SU SU R                   3n[        R                  " U5      nUR	                  5       nUR                  SS5      nUS;  a  [        SU 35      eUR                  SS5      $ )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)   s         r   get_ticker_news!PolygonAPIWrapper.get_ticker_newsE   r0   r   kwargsc                    UR                  SS5      nUR                  SS5      nUR                  SS5      nUR                  SS5      nUR                  SS	5      nUR                  S
S5      n[         SU SU SU SU SU SU R                   SU SU 3n	[        R                   " U	5      n
U
R	                  5       nUR                  SS5      nUS;  a  [        SU 35      eUR                  SS5      $ )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//r2   z
&adjusted=z&sort=r   r   r!   r"   )r&   r$   r   r%   r'   r(   )r*   r   r8   r:   
multiplierr>   r?   r@   rA   r+   r,   r-   r   s                r   get_aggregates PolygonAPIWrapper.get_aggregatesZ   s    ::j%0ZZ 5q9
JJ{D1	**Y-::j$/zz&%(    !hj\z	{yt++,
TF 	 <<$}}(D)BB{4&122xx	4((r   r   c                 |   US:X  a%  [         R                  " U R                  U5      5      $ US:X  a%  [         R                  " U R                  U5      5      $ US:X  a%  [         R                  " U R	                  U5      5      $ US:X  a'  [         R                  " U R
                  " U40 UD65      $ [        SU S35      e)Nr.   r3   r6   rE   zInvalid mode z for Polygon API.)r'   dumpsr.   r3   r6   rE   r(   )r*   r   r   r8   s       r   runPolygonAPIWrapper.run|   s    ##::d11&9::%%::d11&9::&&::d226:;;%%::d11&CFCDD}TF2CDEEr    )__name__
__module____qualname____firstlineno____doc__r   r   str__annotations__r	   classmethodr   r   r   dictr.   r3   r6   rE   rI   __static_attributes__rK   r   r   r   r      s    "%)OXc])(#$ 3   $)S )Xd^ )*)S )Xd^ ) )c )htn )* )S  )C  )HTN  )D
F 
FS 
FC 
FC 
Fr   r   )rP   r'   typingr   r   r   r%   langchain_core.utilsr   pydanticr   r	   r$   r   rK   r   r   <module>rY      s4   
  & &  5 /, vF	 vFr   