
    Xj.                         U d dl Z d dlZd dlmZ 	 d dlZdZn# e$ r dZY nw xY wd dlmZ d dl	m
Z
  e
e          Z G d d          Zdaedz  ed	<   d
efdZdS )    N)AnyTF)settings)
get_loggerc            	           e Zd Zd ZdedededefdZdedeeee	f                  dz  fd	Z
dded
eeee	f                  dedz  defdZdedefdZdededefdZdedefdZd ZdS )
GraphCachec                 :   t           ot          j        | _        d | _        | j        r	 t          j        r't          j        t          j        dd          | _        nGt          j        t          j	        t          j
        t          j        t          j        dd          | _        | j                                         t                              d           d S # t           $ r7}t                              d| d           d| _        d | _        Y d }~d S d }~ww xY wd S )	NT   )decode_responsessocket_connect_timeout)hostportdbpasswordr
   r   z$Redis cache initialized successfullyzFailed to connect to Redis: z. Cache disabled.F)REDIS_AVAILABLEr   ENABLE_KNOWLEDGE_GRAPHenabledclient	REDIS_URLredisfrom_urlRedis
REDIS_HOST
REDIS_PORTREDIS_DBREDIS_PASSWORDpingloggerinfo	Exceptionwarning)selfes     F/lsinfo/ai/hellotax_ai/base_platform/app/services/graph/graph_cache.py__init__zGraphCache.__init__   s   &J8+J< 	##% "'. *TZ[# # #DKK #(+%0%0#,!)!8)-/0# # #DK   """BCCCCC # # #RaRRRSSS$"##	# 	#s   B-C 
D!,DDprefix	tenant_idkb_idreturnc                    t          |                                          }t          j        |d          }t	          j        |                                                                          d d         }d| d| d| d| S )NT)	sort_keys   graph:tenant::kb::)sorteditemsjsondumpshashlibsha256encode	hexdigest)r!   r%   r&   r'   kwargssorted_params	param_str
param_hashs           r#   _generate_keyzGraphCache._generate_key.   s    v||~~..J}===	^I$4$4$6$677AACCCRCH
KyKKeKKfKKzKKK    keyNc                 f   | j         r| j        sd S 	 | j                            |          }|r1t                              d|            t          j        |          S t                              d|            d S # t          $ r(}t                              d|            Y d }~d S d }~ww xY w)NzCache hit: zCache miss: zCache get error: )	r   r   getr   debugr1   loadsr   error)r!   r=   valuer"   s       r#   r?   zGraphCache.get4   s    | 	4; 	4		KOOC((E )0300111z%(((LL---...4 	 	 	LL0Q0011144444	s   AA> A> >
B0B++B0rC   ttlc                 P   | j         r| j        sdS 	 |pt          j        }t	          j        |          }| j                            |||           t                              d| d| d           dS # t          $ r(}t          
                    d|            Y d }~dS d }~ww xY w)NFzCache set: z (TTL: zs)TzCache set error: )r   r   r   GRAPH_CACHE_TTLr1   r2   setexr   r@   r   rB   )r!   r=   rC   rD   
serializedr"   s         r#   setzGraphCache.setB   s    | 	4; 	5	11CE**JKc3
333LL:s::3:::;;;4 	 	 	LL0Q0011155555	s   AA3 3
B%=B  B%c                     | j         r| j        sdS 	 | j                            |           t                              d|            dS # t
          $ r(}t                              d|            Y d }~dS d }~ww xY w)NFzCache deleted: TzCache delete error: )r   r   deleter   r@   r   rB   )r!   r=   r"   s      r#   rK   zGraphCache.deleteO   s    | 	4; 	5	Ks###LL03001114 	 	 	LL33344455555	s   7A 
A=A88A=document_idc           
         | j         r| j        sd S 	 d| d| d| d}d}d}	 | j                            ||d          \  }}|r! | j        j        |  |t	          |          z  }|dk    rnKt
                              d	| d
| d| d|            d S # t          $ r(}t
                              d|            Y d }~d S d }~ww xY w)Nr,   r-   z:*:**r   Td   matchcountInvalidated z cache entries for document  in tenant z, kb Cache invalidation error: 	r   r   scanrK   lenr   r   r   rB   )	r!   rL   r&   r'   patterncursordeleted_countkeysr"   s	            r#   invalidate_documentzGraphCache.invalidate_documentZ   s>   | 	4; 	F	;NiNNUNNNNNGFM#{//gS/QQ /&DK&--!SYY.MQ;; KKy}yy+yybkyyrwyy      	; 	; 	;LL9a99:::::::::	;s   BB 
C CCc                    | j         r| j        sd S 	 d| d| d}d}d}	 | j                            ||d          \  }}|r! | j        j        |  |t	          |          z  }|dk    rnKt
                              d| d	| d
|            d S # t          $ r(}t
                              d|            Y d }~d S d }~ww xY w)Nr,   r-   z:*r   TrO   rP   rS   z cache entries for kb rT   rU   rV   )r!   r'   r&   rY   rZ   r[   r\   r"   s           r#   invalidate_knowledge_basez$GraphCache.invalidate_knowledge_basen   s-   | 	4; 	F	;>i>>U>>>GFM#{//gS/QQ /&DK&--!SYY.MQ;; KKa}aaEaaV_aa      	; 	; 	;LL9a99:::::::::	;s   A<B 
CB==Cc                 r   | j         r| j        sd S 	 d}d}d}	 | j                            ||d          \  }}|r! | j        j        |  |t	          |          z  }|dk    rnKt
                              d| d           d S # t          $ r(}t
                              d|            Y d }~d S d }~ww xY w)	Nzgraph:*r   TrO   rP   zCleared z cache entrieszCache clear error: rV   )r!   rY   rZ   r[   r\   r"   s         r#   	clear_allzGraphCache.clear_all   s    | 	4; 	F	4GFM#{//gS/QQ /&DK&--!SYY.MQ;; KK@=@@@AAAAA 	4 	4 	4LL2q22333333333	4s   A0B 
B6B11B6N)__name__
__module____qualname__r$   strintr;   listdictr   r?   boolrI   rK   r]   r_   ra    r<   r#   r   r      sS       # # #2LC LC L LRU L L L Ls tDcN3d:     s 4S#X#7 cDj TX    	# 	$ 	 	 	 	;s ;s ;3 ; ; ; ;(;s ;s ; ; ; ;(4 4 4 4 4r<   r   graph_cacher(   c                  :    t           t                      a t           S rb   )rl   r   rk   r<   r#   get_graph_cachern      s     llr<   )r3   r1   typingr   r   r   ImportError
app.configr   common_loggingr   rc   r   r   rl   __annotations__rn   rk   r<   r#   <module>rt      s          LLLOO   OOO       % % % % % %	H		4 4 4 4 4 4 4 4D "&Z$ % % %      s    ""