
    g3fiD                    l    d dl mZ d dlmZmZ d dlmZ d dlmZm	Z	m
Z
mZ d dlmZ  G d dee         Zy)	    )annotations)MappingSequence)Any)	BaseCacheFullKey	NamespaceValueT)SerializerProtocolc                  ~     e Zd ZdZddd	 	 	 	 	 	 	 d fdZddZddZddZdd	Zdd
Z	ddZ
dddZdddZ xZS )
RedisCachez2Redis-based cache implementation with TTL support.Nzlanggraph:cache:)serdeprefixc               B    t         |   |       || _        || _        y)zInitialize the cache with a Redis client.

        Args:
            redis: Redis client instance (sync or async)
            serde: Serializer to use for values
            prefix: Key prefix for all cached values
        )r   N)super__init__redisr   )selfr   r   r   	__class__s       \/var/www/auto_recruiter/arenv/lib/python3.12/site-packages/langgraph/cache/redis/__init__.pyr   zRedisCache.__init__   s#     	u%
    c                v    |rdj                  |      nd}|r| j                   | d| S | j                   | S )z*Create a Redis key from namespace and key.: )joinr   )r   nskeyns_strs       r   	_make_keyzRedisCache._make_key   s@    !#"17$++vhau-R}SE=RRr   c                   |j                  | j                        st        d| d| j                         |t        | j                        d }d|v r(|j	                  d      }|d   }|dd }t        |      |fS t               |fS )z,Parse a Redis key back to namespace and key.zKey z does not start with prefix Nr   )
startswithr   
ValueErrorlensplittuple)r   	redis_key	remainingpartsr   ns_partss         r   
_parse_keyzRedisCache._parse_key$   s    ##DKK0yk!=dkk]K  c$++.01	)OOC(E)CSbzH(OS))GY''r   c                   |si S |D cg c]  \  }}| j                  ||       }}}	 | j                  j                  |      }i }t	        |      D ]O  \  }}|		 |j                  dd      \  }	}
| j                  j                  |	j                         |
f      |||   <   Q |S c c}}w # t        $ r i cY S w xY w# t        $ r Y vw xY w)z)Get the cached values for the given keys.   :   )	r   r   mget	Exception	enumerater%   r   loads_typeddecode)r   keysr   r   
redis_keys
raw_valuesvaluesi	raw_valueencodingdatas              r   getzRedisCache.get4   s    I >BB'"cdnnR-B
B	4J
 )+%j1 	LAy$%.__T1%=NHd&*jj&<&<hoo>OQU=V&WF47O	 ) C
  	I	 ! s)   B&B, AB=,B:9B:=	C	C	c                ,   K   | j                  |      S w)z8Asynchronously get the cached values for the given keys.)r<   )r   r4   s     r   agetzRedisCache.agetP   s     xx~s   c                   |sy| j                   j                         }|j                         D ]y  \  \  }}\  }}| j                  ||      }| j                  j                  |      \  }}	| dj                         |	z   }
||j                  |||
       h|j                  ||
       { 	 |j                          y# t        $ r Y yw xY w)z2Set the cached values for the given keys and TTLs.Nr   )r   pipelineitemsr   r   dumps_typedencodesetexsetexecuter0   )r   mappingpiper   r   valuettlr'   r:   r;   serialized_values              r   rE   zRedisCache.setT   s     zz""$'.}} 
	6#IR|sr3/I!ZZ33E:NHd #+1~446=

9c+;<$45
	6	LLN 		s   +B< <	CCc                .   K   | j                  |       yw)zAAsynchronously set the cached values for the given keys and TTLs.N)rE   )r   rG   s     r   asetzRedisCache.asetn   s        c                   	 |F| j                    d}| j                  j                  |      }|r | j                  j                  |  yg }|D ]e  }|rdj	                  |      nd}|r| j                    | dn| j                    d}| j                  j                  |      }|j                  |       g |r | j                  j                  |  yyy# t        $ r Y yw xY w)zrDelete the cached values for the given namespaces.
        If no namespaces are provided, clear all cached values.N*r   r   z:*)r   r   r4   deleter   extendr0   )r   
namespacespatternr4   keys_to_deleter   r   s          r   clearzRedisCache.clearr   s    	!![[M+zzw/%DJJ%%t, "$$ 0B-/SXXb\RF6<4;;-xr2T[[MQRBS   ::??73D"))$/0 "%DJJ%%~6 "   		s   AC 
BC 	C C c                .   K   | j                  |       yw)zAsynchronously delete the cached values for the given namespaces.
        If no namespaces are provided, clear all cached values.N)rV   )r   rS   s     r   aclearzRedisCache.aclear   s      	

:rN   )r   r   r   zSerializerProtocol | Noner   strreturnNone)r   r	   r   rY   rZ   rY   )r'   rY   rZ   ztuple[Namespace, str])r4   zSequence[FullKey]rZ   zdict[FullKey, ValueT])rG   z+Mapping[FullKey, tuple[ValueT, int | None]]rZ   r[   )N)rS   zSequence[Namespace] | NonerZ   r[   )__name__
__module____qualname____doc__r   r   r+   r<   r>   rE   rM   rV   rX   __classcell__)r   s   @r   r   r   
   sg    < ,0( )	
  
$S
( 846 r   r   N)
__future__r   collections.abcr   r   typingr   langgraph.cache.baser   r   r	   r
   langgraph.checkpoint.serde.baser   r    r   r   <module>rg      s*    " -  F F >F6" Fr   