
    ng\j9/                        S SK JrJr  S SKJr  S SKJr  S SKJr  S SK	J
r
JrJrJr  S SKJr   " S S\5      r " S	 S
\5      r\" SS9 " S S5      5       r " S S5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S \5      r " S! S"\5      r " S# S$\5      rg%)&    )ABCabstractmethod)OrderedDict)	dataclass)Enum)AnyListOptionalUnion)	CSCReasonc                       \ rS rSrSrSrSrg)CacheEntryStatus
   VALIDIN_PROGRESS N)__name__
__module____qualname____firstlineno__r   r   __static_attributes__r       F/home/edenadmin/noVNC/venv/lib/python3.13/site-packages/redis/cache.pyr   r   
   s    EKr   r   c                       \ rS rSrSrSrSrg)EvictionPolicyType   
time_basedfrequency_basedr   N)r   r   r   r   r   r   r   r   r   r   r   r      s    J'Or   r   T)frozenc                   <    \ rS rSr% Sr\\S'   \\S'   Sr\\S'   Sr	g)CacheKey   a  
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   r   __doc__str__annotations__tupler%   r   r   r   r   r!   r!      s    
 LJr   r!   c                   6    \ rS rSrS\S\S\4S jrS rS r	Sr
g	)

CacheEntry'   	cache_keycache_valuestatusc                 4    Xl         X l        X0l        X@l        g N)r-   r.   r/   connection_ref)selfr-   r.   r/   r2   s        r   __init__CacheEntry.__init__(   s     #&,r   c                 p    [        U R                  U R                  U R                  U R                  45      $ r1   )hashr-   r.   r/   r2   r3   s    r   __hash__CacheEntry.__hash__4   s/    ^^T--t{{D<O<OP
 	
r   c                 0    [        U 5      [        U5      :H  $ r1   )r7   )r3   others     r   __eq__CacheEntry.__eq__9   s    DzT%[((r   )r-   r.   r2   r/   N)r   r   r   r   r!   bytesr   r4   r9   r=   r   r   r   r   r+   r+   '   s-    
-
- 
- !	
-

)r   r+   c                       \ rS rSr\\S 5       5       r\R                  \S 5       5       r\\S\4S j5       5       r	\S\
4S j5       r\S\S\\
   4S j5       r\S	\
SS
4S j5       rSrg
)EvictionPolicyInterface=   c                     g r1   r   r8   s    r   cacheEvictionPolicyInterface.cache>        	r   c                     g r1   r   )r3   values     r   rD   rE   C   rF   r   returnc                     g r1   r   r8   s    r   typeEvictionPolicyInterface.typeH   rF   r   c                     g r1   r   r8   s    r   
evict_next"EvictionPolicyInterface.evict_nextM       r   countc                     g r1   r   r3   rQ   s     r   
evict_many"EvictionPolicyInterface.evict_manyQ   rP   r   r-   Nc                     g r1   r   r3   r-   s     r   touchEvictionPolicyInterface.touchU   rP   r   r   )r   r   r   r   propertyr   rD   setterr   rK   r!   rN   intr	   rT   rX   r   r   r   r   rA   rA   =   s       \\   (    H    X   x D  r   rA   c                       \ rS rSr\S 5       r\S\4S j5       r\S 5       r\S\S\	4S j5       r
\S\S\	4S	 j5       rS
rg)CacheConfigurationInterfaceZ   c                     g r1   r   r8   s    r   get_cache_class+CacheConfigurationInterface.get_cache_class[   rP   r   rI   c                     g r1   r   r8   s    r   get_max_size(CacheConfigurationInterface.get_max_size_   rP   r   c                     g r1   r   r8   s    r   get_eviction_policy/CacheConfigurationInterface.get_eviction_policyc   rP   r   rQ   c                     g r1   r   rS   s     r   is_exceeds_max_size/CacheConfigurationInterface.is_exceeds_max_sizeg   rP   r   r#   c                     g r1   r   r3   r#   s     r   is_allowed_to_cache/CacheConfigurationInterface.is_allowed_to_cachek   rP   r   r   N)r   r   r   r   r   ra   r\   rd   rg   boolrj   r'   rn   r   r   r   r   r^   r^   Z   s      c         3 4  r   r^   c                   b   \ rS rSr\\S\4S j5       5       r\\S\4S j5       5       r	\\S\
4S j5       5       r\\S\4S j5       5       r\S\S\\S4   4S	 j5       r\S
\S\4S j5       r\S\\   S\\   4S j5       r\S\\   S\\   4S j5       r\S\4S j5       r\S\S\4S j5       rSrg)CacheInterfacep   rI   c                     g r1   r   r8   s    r   
collectionCacheInterface.collectionq   rF   r   c                     g r1   r   r8   s    r   configCacheInterface.configv   rF   r   c                     g r1   r   r8   s    r   eviction_policyCacheInterface.eviction_policy{   rF   r   c                     g r1   r   r8   s    r   sizeCacheInterface.size   rF   r   keyNc                     g r1   r   r3   r   s     r   getCacheInterface.get   rP   r   entryc                     g r1   r   r3   r   s     r   setCacheInterface.set   rP   r   
cache_keysc                     g r1   r   r3   r   s     r   delete_by_cache_keys#CacheInterface.delete_by_cache_keys   rP   r   r$   c                     g r1   r   r3   r$   s     r   delete_by_redis_keys#CacheInterface.delete_by_redis_keys   rP   r   c                     g r1   r   r8   s    r   flushCacheInterface.flush   rP   r   c                     g r1   r   r   s     r   is_cachableCacheInterface.is_cachable   rP   r   r   )r   r   r   r   rZ   r   r   ru   r^   rx   rA   r{   r\   r~   r!   r   r+   r   rp   r   r	   r   r?   r   r   r   r   r   r   r   rr   rr   p   sm   K    3    !8    c    x E*d*:$;       tH~ $t*   tE{ tDz   s   x D  r   rr   c                       \ rS rSrS\SS4S jr\S\4S j5       r\S\4S j5       r	\S\
4S j5       r\S\4S	 j5       rS
\S\4S jrS\S\\S4   4S jrS\\   S\\   4S jrS\\\   \\   4   S\\   4S jrS\4S jrS\S\4S jrSrg)DefaultCache   cache_configrI   Nc                     [        5       U l        Xl        U R                  R                  5       R	                  5       U l        X R
                  l        g r1   )r   _cache_cache_configrg   rH   _eviction_policyrD   r3   r   s     r   r4   DefaultCache.__init__   s?     "m) $ 2 2 F F H N N P&*#r   c                     U R                   $ r1   r   r8   s    r   ru   DefaultCache.collection       {{r   c                     U R                   $ r1   )r   r8   s    r   rx   DefaultCache.config   s    !!!r   c                     U R                   $ r1   r   r8   s    r   r{   DefaultCache.eviction_policy   s    $$$r   c                 ,    [        U R                  5      $ r1   )lenr   r8   s    r   r~   DefaultCache.size   s    4;;r   r   c                     U R                  UR                  5      (       d  gXR                  UR                  '   U R                  R	                  UR                  5        g)NFT)r   r-   r   r   rX   r   s     r   r   DefaultCache.set   sE    00',EOO$##EOO4r   r   c                 |    U R                   R                  US 5      nUc  g U R                  R                  U5        U$ r1   )r   r   r   rX   )r3   r   r   s      r   r   DefaultCache.get   s7    T*=##C(r   r   c                     / nU HT  nU R                  U5      b.  U R                  R                  U5        UR                  S5        MC  UR                  S5        MV     U$ )NTF)r   r   popappend)r3   r   responser   s       r   r   !DefaultCache.delete_by_cache_keys   sN    Cxx}($%&  r   r$   c                 
  ^ / n/ nU H  nU/n[        U[        5      (       a!  UR                  UR                  S5      5        O6[        U[        5      (       a!   UR                  UR                  S5      5        U R                   HA  m[        U4S jU 5       5      (       d  M  UR                  T5        UR                  S5        MC     M     U H  nU R                  R                  U5        M      U$ ! [         a     Nf = f)Nzutf-8c              3   @   >#    U  H  oTR                   ;   v   M     g 7fr1   )r$   ).0	candidater-   s     r   	<genexpr>4DefaultCache.delete_by_redis_keys.<locals>.<genexpr>   s     U*YI$8$88*s   T)

isinstancer'   r   encoder?   decodeUnicodeDecodeErrorr   anyr   )r3   r$   r   keys_to_delete	redis_key
candidatesr   r-   s          @r   r   !DefaultCache.delete_by_redis_keys   s     #I#J)S))!!)"2"27";<Iu--%%i&6&6w&?@ "[[	U*UUU")))4OOD) ) $  "CKKOOC  "  * s    C55
DDc                 d    [        U R                  5      nU R                  R                  5         U$ r1   )r   r   clear)r3   
elem_counts     r   r   DefaultCache.flush   s&    %
r   c                 L    U R                   R                  UR                  5      $ r1   )r   rn   r#   r   s     r   r   DefaultCache.is_cachable   s    !!55ckkBBr   )r   r   r   )r   r   r   r   r^   r4   rZ   r   ru   rx   rA   r{   r\   r~   r+   rp   r   r!   r   r   r	   r   r?   r'   r   r   r   r   r   r   r   r   r      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   r   c                      \ rS rSrSrS\4S jr\S\4S j5       r	\S\
4S j5       r\S\4S j5       r\S\4S	 j5       rS
\S\\S4   4S jrS\S\4S jrS\\   S\\   4S jrS\\   S\\   4S jrS\4S jrS
\S\4S jrSrg)
CacheProxy   zQ
Proxy object that wraps cache implementations to enable additional logic on top
rD   c                     Xl         g r1   r   r3   rD   s     r   r4   CacheProxy.__init__   s    r   rI   c                 .    U R                   R                  $ r1   )r   ru   r8   s    r   ru   CacheProxy.collection  s    {{%%%r   c                 .    U R                   R                  $ r1   )r   rx   r8   s    r   rx   CacheProxy.config  s    {{!!!r   c                 .    U R                   R                  $ r1   )r   r{   r8   s    r   r{   CacheProxy.eviction_policy
  s    {{***r   c                 .    U R                   R                  $ r1   )r   r~   r8   s    r   r~   CacheProxy.size  s    {{r   r   Nc                 8    U R                   R                  U5      $ r1   )r   r   r   s     r   r   CacheProxy.get  s    {{s##r   r   c                     U R                   R                  U5      nU R                  R                  U R                  5      (       a5  SSKJn  U" S[        R                  S9  U R                  R                  5         U$ )Nr   )record_csc_eviction   )rQ   reason)r   r   rx   rj   r~   redis.observability.recorderr   r   FULLr{   rN   )r3   r   is_setr   s       r   r   CacheProxy.set  s[    ';;**49955H ~~   ++-r   r   c                 8    U R                   R                  U5      $ r1   )r   r   r   s     r   r   CacheProxy.delete_by_cache_keys$      {{//
;;r   r$   c                 8    U R                   R                  U5      $ r1   )r   r   r   s     r   r   CacheProxy.delete_by_redis_keys'  r   r   c                 6    U R                   R                  5       $ r1   )r   r   r8   s    r   r   CacheProxy.flush*  s    {{  ""r   c                 8    U R                   R                  U5      $ r1   )r   r   r   s     r   r   CacheProxy.is_cachable-  s    {{&&s++r   r   )r   r   r   r   r&   rr   r4   rZ   r   ru   r^   rx   rA   r{   r\   r~   r!   r   r+   r   rp   r   r	   r   r?   r   r   r   r   r   r   r   r   r      s   n  &K & & "3 " " +!8 + +  c    $x $E*d*:$; $  <tH~ <$t* <<tE{ <tDz <#s #,x ,D ,r   r   c                       \ rS rSrS r\S 5       r\R                  S\4S j5       r\S\	4S j5       r
S\4S jrS	\S\\   4S
 jrS\SS4S jrS rSrg)	LRUPolicyi1  c                     S U l         g r1   )rD   r8   s    r   r4   LRUPolicy.__init__2  s	    
r   c                     U R                   $ r1   r   r8   s    r   rD   LRUPolicy.cache5  r   r   rD   c                     Xl         g r1   r   r   s     r   rD   r   9  s    r   rI   c                 "    [         R                  $ r1   )r   r   r8   s    r   rK   LRUPolicy.type=  s    !,,,r   c                 r    U R                  5         U R                  R                  R                  SS9nUS   $ )NFlastr   )_assert_cacher   ru   popitem)r3   popped_entrys     r   rN   LRUPolicy.evict_nextA  s5    {{--5555AAr   rQ   c                    U R                  5         U[        U R                  R                  5      :  a  [	        S5      e/ n[        U5       H:  nU R                  R                  R                  SS9nUR                  US   5        M<     U$ )Nz#Evictions count is above cache sizeFr   r   )r   r   r   ru   
ValueErrorranger   r   )r3   rQ   popped_keys_r   s        r   rT   LRUPolicy.evict_manyF  s{    3t{{--..BCCuA;;1199u9EL|A/  r   r-   Nc                     U R                  5         U R                  R                  R                  U5      c  [	        S5      eU R                  R                  R                  U5        g )Nz(Given entry does not belong to the cache)r   r   ru   r   r   move_to_endrW   s     r   rX   LRUPolicy.touchS  sM    ;;!!%%i08GHH**95r   c                 r    U R                   b  [        U R                   [        5      (       d  [        S5      eg )Nz6Eviction policy should be associated with valid cache.)rD   r   rr   r   r8   s    r   r   LRUPolicy._assert_cache[  s.    ::Z

N%K%KUVV &Lr   )r   rD   )r   r   r   r   r4   rZ   rD   r[   rr   r   rK   r!   rN   r\   r	   rT   rX   r   r   r   r   r   r   r   1  s       \\>   -( - -H 
 X 6x 6D 6Wr   r   c                       \ rS rSr\rSrg)EvictionPolicyi`  r   N)r   r   r   r   r   LRUr   r   r   r   r
  r
  `  s    
Cr   r
  c                       \ rS rSr\r\R                  rSr	/ SQr
\	\\4S\S\S\4S jjrS rS	\4S
 jrS	\4S jrS\S	\4S jrS\S	\4S jrSrg)CacheConfigid  i'  )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_classr{   c                 (    X l         Xl        X0l        g r1   )_cache_class	_max_sizer   )r3   rK  rL  r{   s       r   r4   CacheConfig.__init__  s     (! /r   c                     U R                   $ r1   )rN  r8   s    r   ra   CacheConfig.get_cache_class  s       r   rI   c                     U R                   $ r1   rO  r8   s    r   rd   CacheConfig.get_max_size  s    ~~r   c                     U R                   $ r1   r   r8   s    r   rg   CacheConfig.get_eviction_policy  s    $$$r   rQ   c                     XR                   :  $ r1   rT  rS   s     r   rj   CacheConfig.is_exceeds_max_size  s    ~~%%r   r#   c                     XR                   ;   $ r1   )DEFAULT_ALLOW_LISTrm   s     r   rn   CacheConfig.is_allowed_to_cache  s    1111r   )rN  r   rO  N)r   r   r   r   r   DEFAULT_CACHE_CLASSr
  r  DEFAULT_EVICTION_POLICYDEFAULT_MAX_SIZEr[  r\   r   r4   ra   rd   rg   rp   rj   r'   rn   r   r   r   r   r  r  d  s    &,00K^ ).*A	00 0 (	0!c %^ %& & &23 24 2r   r  c                   ,    \ rS rSr\S\4S j5       rSrg)CacheFactoryInterfacei  rI   c                     g r1   r   r8   s    r   	get_cacheCacheFactoryInterface.get_cache  rP   r   r   N)r   r   r   r   r   rr   rc  r   r   r   r   ra  ra    s    >  r   ra  c                   :    \ rS rSrSS\\   4S jjrS\4S jrSr	g)	CacheFactoryi  Nr   c                 J    Xl         U R                   c  [        5       U l         g g r1   )_configr  r   s     r   r4   CacheFactory.__init__  s    #<<&=DL  r   rI   c                 h    U R                   R                  5       n[        U" U R                   S95      $ )N)r   )rh  ra   r   )r3   rL  s     r   rc  CacheFactory.get_cache  s(    ll224+4<<@AAr   )rh  r1   )
r   r   r   r   r
   r  r4   rr   rc  r   r   r   r   rf  rf    s!    )Xk%: )B> Br   rf  N)abcr   r   collectionsr   dataclassesr   enumr   typingr   r	   r
   r   redis.observability.attributesr   r   r   r!   r+   rA   r^   rr   r   r   r   r
  r  ra  rf  r   r   r   <module>rr     s    # # !  - - 4 t  
( (
 $  $) ),c :# ,+S +\YC> YCx4, 4,n,W' ,W^T i2- i2XC 	B( 	Br   