
    Oǻi9/                        d dl mZmZ d dlmZ d dl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      Z G d	 d
e      Z ed       G d d             Z G d d      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d d e      Z G d! d"e      Z G d# d$e      Zy%)&    )ABCabstractmethod)OrderedDict)	dataclass)Enum)AnyListOptionalUnion)	CSCReasonc                       e Zd ZdZdZy)CacheEntryStatusVALIDIN_PROGRESSN)__name__
__module____qualname__r   r        I/opt/lhia/marcimex/agent/venv/lib/python3.12/site-packages/redis/cache.pyr   r   
   s    EKr   r   c                       e Zd ZdZdZy)EvictionPolicyType
time_basedfrequency_basedN)r   r   r   r   r   r   r   r   r   r      s    J'Or   r   T)frozenc                   4    e Zd ZU dZeed<   eed<   dZeed<   y)CacheKeya  
    Represents a unique key for a cache entry.

    Attributes:
        command (str): The Redis command being cached.
        redis_keys (tuple): The Redis keys involved in the command.
        redis_args (tuple): Additional arguments for the Redis command.
            This field is included in the cache key to ensure uniqueness
            when commands have the same keys but different arguments.
            Changing this field will affect cache key uniqueness.
    command
redis_keysr   
redis_argsN)r   r   r   __doc__str__annotations__tupler    r   r   r   r   r      s    
 LJr   r   c                   ,    e Zd ZdededefdZd Zd Zy)
CacheEntry	cache_keycache_valuestatusc                 <    || _         || _        || _        || _        y N)r'   r(   r)   connection_ref)selfr'   r(   r)   r,   s        r   __init__zCacheEntry.__init__(   s"     #&,r   c                 p    t        | j                  | j                  | j                  | j                  f      S r+   )hashr'   r(   r)   r,   r-   s    r   __hash__zCacheEntry.__hash__4   s/    ^^T--t{{D<O<OP
 	
r   c                 0    t        |       t        |      k(  S r+   )r0   )r-   others     r   __eq__zCacheEntry.__eq__9   s    DzT%[((r   N)	r   r   r   r   bytesr   r.   r2   r5   r   r   r   r&   r&   '   s-    
-
- 
- !	
-

)r   r&   c                       e Zd Zeed               Zej                  ed               Zeedefd              Zede	fd       Z
ededee	   fd       Zede	dd	fd
       Zy	)EvictionPolicyInterfacec                      y r+   r   r1   s    r   cachezEvictionPolicyInterface.cache>        	r   c                      y r+   r   )r-   values     r   r:   zEvictionPolicyInterface.cacheC   r;   r   returnc                      y r+   r   r1   s    r   typezEvictionPolicyInterface.typeH   r;   r   c                      y r+   r   r1   s    r   
evict_nextz"EvictionPolicyInterface.evict_nextM       r   countc                      y r+   r   r-   rD   s     r   
evict_manyz"EvictionPolicyInterface.evict_manyQ   rC   r   r'   Nc                      y r+   r   r-   r'   s     r   touchzEvictionPolicyInterface.touchU   rC   r   )r   r   r   propertyr   r:   setterr   r@   r   rB   intr	   rG   rJ   r   r   r   r8   r8   =   s       \\   (    H    X   x D  r   r8   c                   v    e Zd Zed        Zedefd       Zed        Zededefd       Z	ede
defd       Zy	)
CacheConfigurationInterfacec                      y r+   r   r1   s    r   get_cache_classz+CacheConfigurationInterface.get_cache_class[   rC   r   r>   c                      y r+   r   r1   s    r   get_max_sizez(CacheConfigurationInterface.get_max_size_   rC   r   c                      y r+   r   r1   s    r   get_eviction_policyz/CacheConfigurationInterface.get_eviction_policyc   rC   r   rD   c                      y r+   r   rF   s     r   is_exceeds_max_sizez/CacheConfigurationInterface.is_exceeds_max_sizeg   rC   r   r   c                      y r+   r   r-   r   s     r   is_allowed_to_cachez/CacheConfigurationInterface.is_allowed_to_cachek   rC   r   N)r   r   r   r   rQ   rM   rS   rU   boolrW   r"   rZ   r   r   r   rO   rO   Z   s      c         3 4  r   rO   c                   F   e Zd Zeedefd              Zeedefd              Zeede	fd              Z
eedefd              Zededeedf   fd       Zed	edefd
       Zedee   dee   fd       Zedee   dee   fd       Zedefd       Zededefd       Zy)CacheInterfacer>   c                      y r+   r   r1   s    r   
collectionzCacheInterface.collectionq   r;   r   c                      y r+   r   r1   s    r   configzCacheInterface.configv   r;   r   c                      y r+   r   r1   s    r   eviction_policyzCacheInterface.eviction_policy{   r;   r   c                      y r+   r   r1   s    r   sizezCacheInterface.size   r;   r   keyNc                      y r+   r   r-   rf   s     r   getzCacheInterface.get   rC   r   entryc                      y r+   r   r-   rj   s     r   setzCacheInterface.set   rC   r   
cache_keysc                      y r+   r   r-   rn   s     r   delete_by_cache_keysz#CacheInterface.delete_by_cache_keys   rC   r   r   c                      y r+   r   r-   r   s     r   delete_by_redis_keysz#CacheInterface.delete_by_redis_keys   rC   r   c                      y r+   r   r1   s    r   flushzCacheInterface.flush   rC   r   c                      y r+   r   rh   s     r   is_cachablezCacheInterface.is_cachable   rC   r   )r   r   r   rK   r   r   r_   rO   ra   r8   rc   rM   re   r   r   r&   ri   r[   rm   r	   rq   r6   rt   rv   rx   r   r   r   r]   r]   p   sm   K    3    !8    c    x E*d*:$;       tH~ $t*   tE{ tDz   s   x D  r   r]   c                      e Zd ZdeddfdZedefd       Zedefd       Zede	fd       Z
edefd       Zd	edefd
Zdedeedf   fdZdee   dee   fdZdeee   ee   f   dee   fdZdefdZdedefdZy)DefaultCachecache_configr>   Nc                     t               | _        || _        | j                  j                         j	                         | _        | | j
                  _        y r+   )r   _cache_cache_configrU   r=   _eviction_policyr:   r-   r{   s     r   r.   zDefaultCache.__init__   sC     "m) $ 2 2 F F H N N P&*#r   c                     | j                   S r+   r}   r1   s    r   r_   zDefaultCache.collection       {{r   c                     | j                   S r+   )r~   r1   s    r   ra   zDefaultCache.config   s    !!!r   c                     | j                   S r+   r   r1   s    r   rc   zDefaultCache.eviction_policy   s    $$$r   c                 ,    t        | j                        S r+   )lenr}   r1   s    r   re   zDefaultCache.size   s    4;;r   rj   c                     | j                  |j                        sy|| j                  |j                  <   | j                  j	                  |j                         y)NFT)rx   r'   r}   r   rJ   rl   s     r   rm   zDefaultCache.set   sD    0',EOO$##EOO4r   rf   c                 z    | j                   j                  |d       }|y | j                  j                  |       |S r+   )r}   ri   r   rJ   )r-   rf   rj   s      r   ri   zDefaultCache.get   s7    T*=##C(r   rn   c                     g }|D ]Q  }| j                  |      -| j                  j                  |       |j                  d       A|j                  d       S |S )NTF)ri   r}   popappend)r-   rn   responserf   s       r   rq   z!DefaultCache.delete_by_cache_keys   sS     	'Cxx}($%&	' r   r   c                    g }g }|D ]  }|g}t        |t              r!|j                  |j                  d             n1t        |t              r!	 |j                  |j                  d             | j                  D ]9  t        fd|D              s|j                         |j                  d       ;  |D ]  }| j                  j                  |        |S # t        $ r Y yw xY w)Nzutf-8c              3   :   K   | ]  }|j                   v   y wr+   )r   ).0	candidater'   s     r   	<genexpr>z4DefaultCache.delete_by_redis_keys.<locals>.<genexpr>   s     UYyI$8$88Us   T)

isinstancer"   r   encoder6   decodeUnicodeDecodeErrorr}   anyr   )r-   r   r   keys_to_delete	redis_key
candidatesrf   r'   s          @r   rt   z!DefaultCache.delete_by_redis_keys   s     # 	*I#J)S)!!)"2"27";<Iu-%%i&6&6w&?@ "[[ *	U*UU")))4OOD)*	*  " 	!CKKOOC 	!  * s    C	C*)C*c                 d    t        | j                        }| j                  j                          |S r+   )r   r}   clear)r-   
elem_counts     r   rv   zDefaultCache.flush   s&    %
r   c                 L    | j                   j                  |j                        S r+   )r~   rZ   r   rh   s     r   rx   zDefaultCache.is_cachable   s    !!55ckkBBr   )r   r   r   rO   r.   rK   r   r_   ra   r8   rc   rM   re   r&   r[   rm   r   r   ri   r	   rq   r6   r"   rt   rv   rx   r   r   r   rz   rz      s   +1+ 
+ K   "3 " " %!8 % %  c      x E*d*:$; 
tH~ 
$t* 
UT#Y 67	d6s 
Cx CD Cr   rz   c                       e Zd ZdZdefdZedefd       Zede	fd       Z
edefd       Zedefd       Zd	edeed
f   fdZdedefdZdee   dee   fdZdee   dee   fdZdefdZd	edefdZy
)
CacheProxyzY
    Proxy object that wraps cache implementations to enable additional logic on top
    r:   c                     || _         y r+   r   r-   r:   s     r   r.   zCacheProxy.__init__   s	    r   r>   c                 .    | j                   j                  S r+   )r}   r_   r1   s    r   r_   zCacheProxy.collection  s    {{%%%r   c                 .    | j                   j                  S r+   )r}   ra   r1   s    r   ra   zCacheProxy.config  s    {{!!!r   c                 .    | j                   j                  S r+   )r}   rc   r1   s    r   rc   zCacheProxy.eviction_policy
  s    {{***r   c                 .    | j                   j                  S r+   )r}   re   r1   s    r   re   zCacheProxy.size  s    {{r   rf   Nc                 8    | j                   j                  |      S r+   )r}   ri   rh   s     r   ri   zCacheProxy.get  s    {{s##r   rj   c                     | j                   j                  |      }| j                  j                  | j                        r8ddlm}  |dt        j                         | j                  j                          |S )Nr   )record_csc_eviction   )rD   reason)r}   rm   ra   rW   re   redis.observability.recorderr   r   FULLrc   rB   )r-   rj   is_setr   s       r   rm   zCacheProxy.set  sX    ';;**4995H ~~   ++-r   rn   c                 8    | j                   j                  |      S r+   )r}   rq   rp   s     r   rq   zCacheProxy.delete_by_cache_keys$      {{//
;;r   r   c                 8    | j                   j                  |      S r+   )r}   rt   rs   s     r   rt   zCacheProxy.delete_by_redis_keys'  r   r   c                 6    | j                   j                         S r+   )r}   rv   r1   s    r   rv   zCacheProxy.flush*  s    {{  ""r   c                 8    | j                   j                  |      S r+   )r}   rx   rh   s     r   rx   zCacheProxy.is_cachable-  s    {{&&s++r   )r   r   r   r!   r]   r.   rK   r   r_   rO   ra   r8   rc   rM   re   r   r   r&   ri   r[   rm   r	   rq   r6   rt   rv   rx   r   r   r   r   r      s   n  &K & & "3 " " +!8 + +  c    $x $E*d*:$; $  <tH~ <$t* <<tE{ <tDz <#s #,x ,D ,r   r   c                       e Zd Zd Zed        Zej                  defd       Zedefd       Z	de
fdZdedee
   fd	Zd
e
ddfdZd Zy)	LRUPolicyc                     d | _         y r+   )r:   r1   s    r   r.   zLRUPolicy.__init__2  s	    
r   c                     | j                   S r+   r   r1   s    r   r:   zLRUPolicy.cache5  r   r   r:   c                     || _         y r+   r   r   s     r   r:   zLRUPolicy.cache9  s	    r   r>   c                 "    t         j                  S r+   )r   r   r1   s    r   r@   zLRUPolicy.type=  s    !,,,r   c                 x    | j                          | j                  j                  j                  d      }|d   S )NFlastr   )_assert_cacher}   r_   popitem)r-   popped_entrys     r   rB   zLRUPolicy.evict_nextA  s5    {{--5555AAr   rD   c                    | j                          |t        | j                  j                        kD  rt	        d      g }t        |      D ]<  }| j                  j                  j                  d      }|j                  |d          > |S )Nz#Evictions count is above cache sizeFr   r   )r   r   r}   r_   
ValueErrorranger   r   )r-   rD   popped_keys_r   s        r   rG   zLRUPolicy.evict_manyF  s    3t{{--..BCCu 	0A;;1199u9EL|A/	0 r   r'   Nc                     | j                          | j                  j                  j                  |      t	        d      | j                  j                  j                  |       y )Nz(Given entry does not belong to the cache)r   r}   r_   ri   r   move_to_endrI   s     r   rJ   zLRUPolicy.touchS  sM    ;;!!%%i08GHH**95r   c                 f    | j                   t        | j                   t              st        d      y )Nz6Eviction policy should be associated with valid cache.)r:   r   r]   r   r1   s    r   r   zLRUPolicy._assert_cache[  s+    ::Z

N%KUVV &Lr   )r   r   r   r.   rK   r:   rL   r]   r   r@   r   rB   rM   r	   rG   rJ   r   r   r   r   r   r   1  s       \\>   -( - -H 
 X 6x 6D 6Wr   r   c                       e Zd ZeZy)EvictionPolicyN)r   r   r   r   LRUr   r   r   r   r   `  s    
Cr   r   c                       e Zd ZeZej                  ZdZg dZ	eeefde
dedefdZd Zde
fd	Zdefd
Zde
defdZdedefdZy)CacheConfigi'  )JBITCOUNTBITFIELD_ROBITPOSEXISTSGEODISTGEOHASHGEOPOSGEORADIUSBYMEMBER_ROGEORADIUS_RO	GEOSEARCHGETGETBITGETRANGEHEXISTSHGETHGETALLHKEYSHLENHMGETHSTRLENHVALSzJSON.ARRINDEXzJSON.ARRLENzJSON.GETz	JSON.MGETzJSON.OBJKEYSzJSON.OBJLENz	JSON.RESPzJSON.STRLENz	JSON.TYPELCSLINDEXLLENLPOSLRANGEMGETSCARDSDIFFSINTER
SINTERCARD	SISMEMBERSMEMBERS
SMISMEMBERSORT_ROSTRLENSUBSTRSUNIONzTS.GETzTS.INFOzTS.RANGEzTS.REVRANGETYPEXLENXPENDINGXRANGEXREAD	XREVRANGEZCARDZCOUNTZDIFFZINTER
ZINTERCARD	ZLEXCOUNTZMSCOREZRANGEZRANGEBYLEXZRANGEBYSCOREZRANK	ZREVRANGEZREVRANGEBYLEXZREVRANGEBYSCOREZREVRANKZSCOREZUNIONmax_sizecache_classrc   c                 .    || _         || _        || _        y r+   )_cache_class	_max_sizer   )r-   r  r  rc   s       r   r.   zCacheConfig.__init__  s     (! /r   c                     | j                   S r+   )r  r1   s    r   rQ   zCacheConfig.get_cache_class  s       r   r>   c                     | j                   S r+   r  r1   s    r   rS   zCacheConfig.get_max_size  s    ~~r   c                     | j                   S r+   r   r1   s    r   rU   zCacheConfig.get_eviction_policy  s    $$$r   rD   c                      || j                   kD  S r+   r  rF   s     r   rW   zCacheConfig.is_exceeds_max_size  s    t~~%%r   r   c                     || j                   v S r+   )DEFAULT_ALLOW_LISTrY   s     r   rZ   zCacheConfig.is_allowed_to_cache  s    $1111r   N)r   r   r   rz   DEFAULT_CACHE_CLASSr   r   DEFAULT_EVICTION_POLICYDEFAULT_MAX_SIZEr  rM   r   r.   rQ   rS   rU   r[   rW   r"   rZ   r   r   r   r   r   d  s    &,00K^ ).*A	00 0 (	0!c %^ %& & &23 24 2r   r   c                   "    e Zd Zedefd       Zy)CacheFactoryInterfacer>   c                      y r+   r   r1   s    r   	get_cachezCacheFactoryInterface.get_cache  rC   r   N)r   r   r   r   r]   r  r   r   r   r  r    s    >  r   r  c                   ,    e Zd Zddee   fdZdefdZy)CacheFactoryNr{   c                 J    || _         | j                   t               | _         y y r+   )_configr   r   s     r   r.   zCacheFactory.__init__  s!    #<<&=DL  r   r>   c                 n    | j                   j                         }t         || j                               S )N)r{   )r!  rQ   r   )r-   r  s     r   r  zCacheFactory.get_cache  s(    ll224+4<<@AAr   r+   )r   r   r   r
   r   r.   r]   r  r   r   r   r  r    s!    )Xk%: )B> Br   r  N)abcr   r   collectionsr   dataclassesr   enumr   typingr   r	   r
   r   redis.observability.attributesr   r   r   r   r&   r8   rO   r]   rz   r   r   r   r   r  r  r   r   r   <module>r)     s    # # !  - - 4 t  
( (
 $  $) ),c :# ,+S +\YC> YCx4, 4,n,W' ,W^T i2- i2XC 	B( 	Br   