o
    ̿Si
                     @   s   d dl Z d dlZd dlZd dlmZmZ d dlmZmZmZ d dl	m
Z
 d dlmZ d dlmZ eeZedZedZerLee rLeeZner[ee r[eed	 Znd
ZeeddZdedefddZddee ddfddZdS )    N)datetime	timedelta)AnyDictOptional)get_mongo_db)_get_global_zerodha_client)refresh_stocks_masterSTOCKS_MASTER_REFRESH_TTL_HOURSSTOCKS_MASTER_REFRESH_TTL_DAYS   i  "STOCKS_MASTER_REFRESH_LOOP_SECONDS3600nowreturnc                 C   s   zQ| d  ddipi }|dp|d}t|tr|}n"t|tr>zt|ddjd d}W n ty=   d }Y nw d }|sEW d	S || tt	d
t
dkW S  ty[   Y d	S w )Nsystem_metakeystocks_master_last_refreshedvalue	timestampZz+00:00)tzinfoT   )hours)find_oneget
isinstancer   strfromisoformatreplace	Exceptionr   maxREFRESH_TTL_HOURS)dbr   doctslast r'   E/var/www/html/Trade-python/app/v1/background/stocks_master_refresh.py_should_refresh   s$   

r)   interval_secondsc              
      s   t | pt} td| } 	 zCt }t D ]9}t||s n1t|}|s+t	d  n$t
d t||dgdd}t
d|d|d	|d
|d  W n ty^   td Y nw t| I d H  q)N<   TzB[StocksMaster] Global Zerodha client unavailable; skipping refreshz@[StocksMaster] Refreshing stocks master from Zerodha instrumentsNSE)r#   zerodha_client	exchangesallow_cache_writezC[StocksMaster] Done | inserted=%s updated=%s kept=%s instruments=%sinsertedupdatedkeptinstrumentsz![StocksMaster] Refresh loop error)intLOOP_INTERVAL_SECONDSr!   r   utcnowr   r)   r   loggerwarninginfor	   r   r    	exceptionasynciosleep)r*   r   r#   zerodharesr'   r'   r(   stocks_master_refresh_loop.   s:   




r?   )N)r;   loggingosr   r   typingr   r   r   app.db.databaser   !app.v1.background.global_intradayr   app.v1.services.stocks_masterr	   	getLogger__name__r7   getenv_TTL_HOURS_RAW_TTL_DAYS_RAWr   stripr4   r"   r5   boolr)   r?   r'   r'   r'   r(   <module>   s&    



