
    \i!                         S r SSKrSSKrSSKrSSKrSSKJrJrJr  SSK	J	r	J
r
  \R                  " \5      r " S S5      r\" 5       rSS/rg)zg
Redis Cache Service for QuantEdge AI
Replaces MySQL NBACacheEntry with high-performance Redis caching
    N)AnyOptionalDict)datetime	timedeltac                      \ rS rSrSrS7S\S\S\S\\   4S jjrS	\S
\	S\4S jr
S\S\\	   4S jrS8S\S\	S\S\4S jjrS\S\4S jrS\S\4S jrS9S\S\S\\   4S jjrS:S\S\S\S\S\4
S jjrS;S\S\\   4S jjrS<S\S\S\S\4S jjrS\\   4S jrS=S\S\S\4S  jjrS!\S"\S#\\\	4   S\\\\	4      4S$ jr S>S!\S"\S#\\\	4   S%\\\	4   S&\S\4S' jjrS(\S"\S#\\\	4   S\\\\	4      4S) jr S?S(\S"\S#\\\	4   S*\\\	4   S&\S\4S+ jjrS\\\	4   4S, jrS\4S- jrS\4S. jrS\4S/ jrS8S0\S1\S\S\4S2 jjr S0\S\\   4S3 jr!S0\S\4S4 jr"S@S\S\4S5 jjr#S6r$g)ACacheService   zRedis-based caching serviceNhostportdbpasswordc           
      *    [         R                  " UUUUSSSS9U l         U R                   R                  5         [        R	                  S5        SU l        g ! [         R                   a&    [        R                  S5        SU l        S U l          g f = f)NT   )r   r   r   r   decode_responsessocket_timeoutsocket_connect_timeoutu!   ✅ Redis cache service connectedu)   ❌ Redis not available, caching disabledF)redisRedispingloggerinfoenabledConnectionErrorwarning)selfr   r   r   r   s        R/home/hazypiff/Work/eventheodds/eventheodds_backup/python_service/cache_service.py__init__CacheService.__init__   s    	!!% '(DJ JJOOKK;<DL$$ 	NNFG DLDJ	s   AA 7BBprefixdatareturnc                     [        U[        5      (       a  [        R                  " USS9nO[	        U5      n[
        R                  " UR                  5       5      nU SUR                  5       SS  3$ )zCreate a consistent cache keyT)	sort_keys:Nr
   )	
isinstancedictjsondumpsstrhashlibmd5encode	hexdigest)r   r    r!   data_strhash_objs        r   	_make_keyCacheService._make_key'   sa    dD!!zz$$7H4yH ;;x018--/4566    keyc                    U R                   (       a  U R                  (       d  g U R                  R                  U5      nU(       a  [        R                  " U5      $  g! [
         a"  n[        R                  SU 35         SnAgSnAff = f)zGet value from cacheNzCache get error: )r   r   getr(   loads	Exceptionr   error)r   r4   r!   es       r   r6   CacheService.get3   sq    ||4::	2::>>#&Dzz$'' 
   	2LL,QC011	2s   7A 
B)BBvaluettl_secondsc                    U R                   (       a  U R                  (       d  g [        R                  " U5      nU R                  R	                  XU5      $ ! [
         a"  n[        R                  SU 35         SnAgSnAff = f)zSet value in cache with TTLFzCache set error: N)r   r   r(   r)   setexr8   r   r9   )r   r4   r<   r=   r!   r:   s         r   setCacheService.setA   sc    ||4::	::e$D::##Cd;; 	LL,QC01	s   1A 
B!A>>Bc                     U R                   (       a  U R                  (       d  g [        U R                  R                  U5      5      $ ! [         a"  n[
        R                  SU 35         SnAgSnAff = f)zDelete key from cacheFzCache delete error: N)r   r   booldeleter8   r   r9   )r   r4   r:   s      r   rD   CacheService.deleteM   sX    ||4::	

))#.// 	LL/s34	s   #A	 	
A5A00A5patternc                 "   U R                   (       a  U R                  (       d  g U R                  R                  U5      nU(       a  U R                  R                  " U6 $  g! [         a"  n[
        R                  SU 35         SnAgSnAff = f)zClear all keys matching patternr   zCache clear pattern error: N)r   r   keysrD   r8   r   r9   )r   rF   rH   r:   s       r   clear_patternCacheService.clear_patternX   sw    ||4::	<::??7+Dzz(($// 
   	<LL6qc:;;	<s   :A" "
B,B		Bseasonlimitc                 L    U R                  SXS.5      nU R                  U5      $ )zGet cached NBA games data	nba_gamesrK   rL   r1   r6   )r   rK   rL   r4   s       r   get_nba_gamesCacheService.get_nba_gamesg   s#    nn[V*LMxx}r3   games	ttl_hoursc                 T    U R                  SX#S.5      nU R                  XQUS-  5      $ )zCache NBA games datarN   rO     r1   r@   )r   rS   rK   rL   rT   r4   s         r   set_nba_gamesCacheService.set_nba_gamesl   s+    nn[V*LMxxI$455r3   c                 L    U R                  SSU05      nU R                  U5      $ )zGet cached NBA players datanba_playersrL   rP   )r   rL   r4   s      r   get_nba_playersCacheService.get_nba_playersq   s%    nn]We,<=xx}r3   playersc                 T    U R                  SSU05      nU R                  XAUS-  5      $ )zCache NBA players datar[   rL   rV   rW   )r   r^   rL   rT   r4   s        r   set_nba_playersCacheService.set_nba_playersv   s-    nn]We,<=xxi$&677r3   c                 (    SnU R                  U5      $ )zGet cached NBA teams data	nba_teamsr6   )r   r4   s     r   get_nba_teamsCacheService.get_nba_teams{   s    xx}r3   teamsc                 0    SnU R                  X1US-  5      $ )zACache NBA teams data (longer TTL since teams change infrequently)rc   rV   r@   )r   rg   rT   r4   s       r   set_nba_teamsCacheService.set_nba_teams   s    xxI$455r3   strategy_namemarketparamsc                 P    U R                  SUUUS.5      nU R                  U5      $ )zGet cached backtest resultbackteststrategyrm   rn   rP   )r   rl   rm   rn   r4   s        r   get_backtest_result CacheService.get_backtest_result   s0    nnZ%*
 
 xx}r3   resultttl_minutesc                 X    U R                  SUUUS.5      nU R                  XdUS-  5      $ )zCache backtest resultrp   rq   <   rW   )r   rl   rm   rn   ru   rv   r4   s          r   set_backtest_result CacheService.set_backtest_result   s:     nnZ%*
 
 xx[2%566r3   strategy_codec                     U R                  S[        R                  " UR                  5       5      R	                  5       SS UUS.5      nU R                  U5      $ )zGet cached strategy signalsstrategy_signalsNr
   	code_hashrm   rn   )r1   r+   r,   r-   r.   r6   )r   r{   rm   rn   r4   s        r   get_strategy_signals!CacheService.get_strategy_signals   sS    nn/ ]%9%9%;<FFH"M2
 
 xx}r3   signalsc                     U R                  S[        R                  " UR                  5       5      R	                  5       SS UUS.5      nU R                  XdUS-  5      $ )zCache strategy signalsr}   Nr
   r~   rx   )r1   r+   r,   r-   r.   r@   )r   r{   rm   rn   r   rv   r4   s          r   set_strategy_signals!CacheService.set_strategy_signals   s]     nn/ ]%9%9%;<FFH"M2
 
 xxkB&677r3   c                    U R                   (       a  U R                  (       d  SS0$  U R                  R                  5       nU R                  R                  S5      nS[	        U5      UR                  SS5      UR                  SS5      UR                  S	S5      S
.$ ! [         a0  n[        R                  SU 35        S[        U5      S.s SnA$ SnAff = f)zGet cache statisticsr   F*Tused_memory_humanunknownconnected_clientsr   uptime_in_days)r   
total_keysmemory_usedr   uptime_dayszCache stats error: )r   r9   N)
r   r   r   rH   lenr6   r8   r   r9   r*   )r   r   rH   r:   s       r   	get_statsCacheService.get_stats   s    ||4::u%%	7::??$D::??3'D!$i#xx(;YG%)XX.A1%E#xx(8!<   	7LL.qc23$s1v66	7s   A5B 
C(%CCCc                 J    / SQnSnU H  nX R                  U5      -  nM     U$ )zClear all NBA-related cache)znba_games:*znba_players:*rc   r   rI   )r   patternstotal_deletedrF   s       r   clear_nba_cacheCacheService.clear_nba_cache   s/    @G//88M  r3   c                 $    U R                  S5      $ )z Clear all backtest-related cachez
backtest:*r   )r   s    r   clear_backtest_cache!CacheService.clear_backtest_cache   s    !!,//r3   c                     U R                   (       a  U R                  (       d  g U R                  R                  5       $ ! [         a"  n[        R                  SU 35         SnAgSnAff = f)zClear all cache datar   zClear all cache error: N)r   r   flushdbr8   r   r9   )r   r:   s     r   clear_all_cacheCacheService.clear_all_cache   sQ    ||4::	::%%'' 	LL21#67	s   ? 
A+	A&&A+job_idjob_datac                 0    SU 3nU R                  XBU5      $ )zStore a backtest job in Redisjob:ri   )r   r   r   r=   r4   s        r   set_jobCacheService.set_job   s    VHoxx{33r3   c                 .    SU 3nU R                  U5      $ )z"Retrieve a backtest job from Redisr   rd   r   r   r4   s      r   get_jobCacheService.get_job   s    VHoxx}r3   c                 .    SU 3nU R                  U5      $ )z Delete a backtest job from Redisr   )rD   r   s      r   
delete_jobCacheService.delete_job   s    VHo{{3r3   c                     U R                   (       a  U R                  (       d  / $  U R                  R                  U5      $ ! [         a$  n[        R                  SU 35        / s SnA$ SnAff = f)z"List all job keys matching patternzList jobs error: N)r   r   rH   r8   r   r9   )r   rF   r:   s      r   	list_jobsCacheService.list_jobs   sU    ||4::I	::??7++ 	LL,QC01I	s   A 
A/A*$A/*A/)r   r   )	localhosti  r   N)rV   )2023-24d   )r   r      )r   )r   r   )   )rx   )   )zjob:*)%__name__
__module____qualname____firstlineno____doc__r*   intr   r   r   r1   r6   rC   r@   rD   rI   listrQ   rX   r\   r`   re   rj   r   rs   ry   r   r   r   r   r   r   r   r   r   r   __static_attributes__ r3   r   r	   r	      s   %S c c YabeYf (
7 
73 
73 
7s x} 
s 
3 
S 
D 
	# 	$ 	S S C C (SW. 
64 6 6 6_b 6lp 6
S 8D> 
8t 8C 8# 8W[ 8
x~ 
64 6C 6$ 6 c 4PSUXPX> ^fgkloqtltgu^v  GI7 7c 74PSUXPX> 7#'S>7@C7MQ7# s DQTVYQYN _ghlmprumuhv_w  HJ8# 8s 8DQTVYQYN 8$(cN8AD8NR874S> 7& 0c 0	 	4c 4T 4 4t 4
c htn 
     
 4  r3   r	   cache_service)r   r   r(   r+   loggingtypingr   r   r   r   r   	getLoggerr   r   r	   r   __all__r   r3   r   <module>r      sS   
     & & (			8	$a aH  ?
+r3   