o
    ­UjÖ  ã                   @  sš   d Z ddlmZ ddlZddlZddlmZmZ ddlZej	 
ej	 e¡d¡Zej	 
ed¡ZdZg d¢Zddd„Zddd„Zdddd„Zdd„ edœZdS )z¾Stock universe helpers.

Provides ticker lists to screen. Uses the S&P 500 pulled from Wikipedia
(free, no key) with an on-disk cache and a bundled fallback so the tool
still works offline.
é    )ÚannotationsN)ÚdatetimeÚ	timedeltaz.cachez
sp500.jsoné   )'ZAAPLZMSFTZGOOGLZAMZNZMETAzBRK-BZJPMÚVZJNJZPGZKOZPEPZWMTZHDZBACZXOMZCVXZUNHZPFEÚTZVZZINTCZCSCOZORCLZIBMZGMEZAMCÚFZGMZDISZNKEZMCDZCOSTZTGTZLOWZCATÚDEZMMMZGEÚreturnÚNonec                   C  s   t jtdd� d S )NT)Úexist_ok)ÚosÚmakedirsÚ
_CACHE_DIR© r   r   úMC:\Users\cheed\OneDrive\Desktop\Claude work\finance-tool\screener\universe.pyÚ_ensure_cache_dir   s   r   ÚpathÚstrÚboolc                 C  s8   t j | ¡sdS t t j | ¡¡}t ¡ | ttd�k S )NF)Údays)	r   r   Úexistsr   ÚfromtimestampÚgetmtimeÚnowr   Ú_CACHE_TTL_DAYS)r   Úmtimer   r   r   Ú_cache_fresh!   s   r   FÚforce_refreshú	list[str]c              	   C  sø   t ƒ  | s5ttƒr5zttddd��}t |¡W  d  ƒ W S 1 s"w   Y  W n tjtfy4   Y nw z;d}t 	|¡}|d d  
t¡ ¡ }dd	„ |D ƒ}ttd
dd��}t ||¡ W d  ƒ |W S 1 siw   Y  |W S  ty{   t Y S w )zAReturn S&P 500 tickers, normalised for yfinance (dots -> dashes).Úrzutf-8)ÚencodingNz9https://en.wikipedia.org/wiki/List_of_S%26P_500_companiesr   ÚSymbolc                 S  s   g | ]
}|  d d¡ ¡ ‘qS )Ú.Ú-)ÚreplaceÚstrip)Ú.0Útr   r   r   Ú
<listcomp>7   s    zget_sp500.<locals>.<listcomp>Úw)r   r   Ú_SP500_CACHEÚopenÚjsonÚloadÚJSONDecodeErrorÚOSErrorÚpdÚ	read_htmlÚastyper   ÚtolistÚdumpÚ	ExceptionÚFALLBACK_TICKERS)r   ÚfhÚurlÚtablesÚtickersr   r   r   Ú	get_sp500(   s.   &ÿÿ

ÿþþr<   c                   C  s   t S )N)r7   r   r   r   r   Ú<lambda>A   s    r=   )zFallback (40 liquid names)zS&P 500)r
   r   )r   r   r
   r   )F)r   r   r
   r   )Ú__doc__Ú
__future__r   r-   r   r   r   Úpandasr1   r   ÚjoinÚdirnameÚ__file__r   r+   r   r7   r   r   r<   Ú	UNIVERSESr   r   r   r   Ú<module>   s     


þ