
    1i'                        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  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y")#    )ABCabstractmethod)OrderedDict)	dataclass)Enum)AnyListOptionalUnionc                       e Zd ZdZdZy)CacheEntryStatusVALIDIN_PROGRESSN)__name__
__module____qualname__r   r        U/mnt/e/genesis-system/.venvs/voice-bridge/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__2   s/    ^^T--t{{D<O<OP
 	
r   c                 0    t        |       t        |      k(  S r*   )r/   )r,   others     r   __eq__zCacheEntry.__eq__7   s    DzT%[((r   N)	r   r   r   r   bytesr   r-   r1   r4   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   r0   s    r   cachezEvictionPolicyInterface.cache<        	r   c                      y r*   r   )r,   values     r   r9   zEvictionPolicyInterface.cacheA   r:   r   returnc                      y r*   r   r0   s    r   typezEvictionPolicyInterface.typeF   r:   r   c                      y r*   r   r0   s    r   
evict_nextz"EvictionPolicyInterface.evict_nextK       r   countc                      y r*   r   r,   rC   s     r   
evict_manyz"EvictionPolicyInterface.evict_manyO   rB   r   r&   Nc                      y r*   r   r,   r&   s     r   touchzEvictionPolicyInterface.touchS   rB   r   )r   r   r   propertyr   r9   setterr   r?   r   rA   intr	   rF   rI   r   r   r   r7   r7   ;   s       \\   (    H    X   x D  r   r7   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   r0   s    r   get_cache_classz+CacheConfigurationInterface.get_cache_classY   rB   r   r=   c                      y r*   r   r0   s    r   get_max_sizez(CacheConfigurationInterface.get_max_size]   rB   r   c                      y r*   r   r0   s    r   get_eviction_policyz/CacheConfigurationInterface.get_eviction_policya   rB   r   rC   c                      y r*   r   rE   s     r   is_exceeds_max_sizez/CacheConfigurationInterface.is_exceeds_max_sizee   rB   r   r   c                      y r*   r   r,   r   s     r   is_allowed_to_cachez/CacheConfigurationInterface.is_allowed_to_cachei   rB   r   N)r   r   r   r   rP   rL   rR   rT   boolrV   r!   rY   r   r   r   rN   rN   X   s      c         3 4  r   rN   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   r0   s    r   
collectionzCacheInterface.collectiono   r:   r   c                      y r*   r   r0   s    r   configzCacheInterface.configt   r:   r   c                      y r*   r   r0   s    r   eviction_policyzCacheInterface.eviction_policyy   r:   r   c                      y r*   r   r0   s    r   sizezCacheInterface.size~   r:   r   keyNc                      y r*   r   r,   re   s     r   getzCacheInterface.get   rB   r   entryc                      y r*   r   r,   ri   s     r   setzCacheInterface.set   rB   r   
cache_keysc                      y r*   r   )r,   rm   s     r   delete_by_cache_keysz#CacheInterface.delete_by_cache_keys   rB   r   r   c                      y r*   r   )r,   r   s     r   delete_by_redis_keysz#CacheInterface.delete_by_redis_keys   rB   r   c                      y r*   r   r0   s    r   flushzCacheInterface.flush   rB   r   c                      y r*   r   rg   s     r   is_cachablezCacheInterface.is_cachable   rB   r   )r   r   r   rJ   r   r   r^   rN   r`   r7   rb   rL   rd   r   r   r%   rh   rZ   rl   r	   ro   r5   rq   rs   ru   r   r   r   r\   r\   n   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   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_configrT   r<   _eviction_policyr9   r,   rx   s     r   r-   zDefaultCache.__init__   sC     "m) $ 2 2 F F H N N P&*#r   c                     | j                   S r*   rz   r0   s    r   r^   zDefaultCache.collection       {{r   c                     | j                   S r*   )r{   r0   s    r   r`   zDefaultCache.config   s    !!!r   c                     | j                   S r*   r|   r0   s    r   rb   zDefaultCache.eviction_policy   s    $$$r   c                 ,    t        | j                        S r*   )lenrz   r0   s    r   rd   zDefaultCache.size   s    4;;r   ri   c                 H   | j                  |j                        sy|| j                  |j                  <   | j                  j	                  |j                         | j
                  j                  t        | j                              r| j                  j                          y)NFT)	ru   r&   rz   r|   rI   r{   rV   r   rA   rk   s     r   rl   zDefaultCache.set   ss    0',EOO$##EOO411#dkk2BC!!,,.r   re   c                 z    | j                   j                  |d       }|y | j                  j                  |       |S r*   )rz   rh   r|   rI   )r,   re   ri   s      r   rh   zDefaultCache.get   s7    T*=##C(r   rm   c                     g }|D ]Q  }| j                  |      -| j                  j                  |       |j                  d       A|j                  d       S |S )NTF)rh   rz   popappend)r,   rm   responsere   s       r   ro   z!DefaultCache.delete_by_cache_keys   sS     	'Cxx}($%&	' r   r   c                 $   g }g }|D ]d  }t        |t              r|j                         }| j                  D ]3  }||j                  v s|j                  |       |j                  d       5 f |D ]  }| j                  j                  |        |S )NT)
isinstancer5   decoderz   r   r   r   )r,   r   r   keys_to_delete	redis_keyr&   re   s          r   rq   z!DefaultCache.delete_by_redis_keys   s    # 	*I)U+%,,.	![[ *		 4 44")))4OOD)*	* " 	!CKKOOC 	! r   c                 d    t        | j                        }| j                  j                          |S r*   )r   rz   clear)r,   
elem_counts     r   rs   zDefaultCache.flush   s&    %
r   c                 L    | j                   j                  |j                        S r*   )r{   rY   r   rg   s     r   ru   zDefaultCache.is_cachable   s    !!55ckkBBr   )r   r   r   rN   r-   rJ   r   r^   r`   r7   rb   rL   rd   r%   rZ   rl   r   r   rh   r	   ro   r5   rq   rs   ru   r   r   r   rw   rw      s   +1+ 
+ K   "3 " " %!8 % %  c    
 
 
x E*d*:$; 
tH~ 
$t* 
tE{ tDz "s 
Cx CD Cr   rw   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*   )r9   r0   s    r   r-   zLRUPolicy.__init__   s	    
r   c                     | j                   S r*   r   r0   s    r   r9   zLRUPolicy.cache   r   r   r9   c                     || _         y r*   r   )r,   r9   s     r   r9   zLRUPolicy.cache   s	    r   r=   c                 "    t         j                  S r*   )r   r   r0   s    r   r?   zLRUPolicy.type   s    !,,,r   c                 x    | j                          | j                  j                  j                  d      }|d   S )NFlastr   )_assert_cacherz   r^   popitem)r,   popped_entrys     r   rA   zLRUPolicy.evict_next  s5    {{--5555AAr   rC   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   rz   r^   
ValueErrorranger   r   )r,   rC   popped_keys_r   s        r   rF   zLRUPolicy.evict_many  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   rz   r^   rh   r   move_to_endrH   s     r   rI   zLRUPolicy.touch  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.)r9   r   r\   r   r0   s    r   r   zLRUPolicy._assert_cache  s+    ::Z

N%KUVV &Lr   )r   r   r   r-   rJ   r9   rK   r\   r   r?   r   rA   rL   r	   rF   rI   r   r   r   r   r   r      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_classrb   c                 .    || _         || _        || _        y r*   )_cache_class	_max_sizer|   )r,   r   r   rb   s       r   r-   zCacheConfig.__init__v  s     (! /r   c                     | j                   S r*   )r   r0   s    r   rP   zCacheConfig.get_cache_class  s       r   r=   c                     | j                   S r*   r   r0   s    r   rR   zCacheConfig.get_max_size  s    ~~r   c                     | j                   S r*   r   r0   s    r   rT   zCacheConfig.get_eviction_policy  s    $$$r   rC   c                      || j                   kD  S r*   r   rE   s     r   rV   zCacheConfig.is_exceeds_max_size  s    t~~%%r   r   c                     || j                   v S r*   )DEFAULT_ALLOW_LISTrX   s     r   rY   zCacheConfig.is_allowed_to_cache  s    $1111r   N)r   r   r   rw   DEFAULT_CACHE_CLASSr   r   DEFAULT_EVICTION_POLICYDEFAULT_MAX_SIZEr   rL   r   r-   rP   rR   rT   rZ   rV   r!   rY   r   r   r   r   r   $  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   r0   s    r   	get_cachezCacheFactoryInterface.get_cache  rB   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)CacheFactoryNrx   c                 J    || _         | j                   t               | _         y y r*   )_configr   r}   s     r   r-   zCacheFactory.__init__  s!    #<<&=DL  r   r=   c                 \    | j                   j                         } || j                         S )N)rx   )r  rP   )r,   r   s     r   r   zCacheFactory.get_cache  s#    ll22455r   r*   )r   r   r   r
   r   r-   r\   r   r   r   r   r   r     s    )Xk%: )6> 6r   r   N)abcr   r   collectionsr   dataclassesr   enumr   typingr   r	   r
   r   r   r   r   r%   r7   rN   r\   rw   r   r   r   r   r   r   r   r   <module>r     s    # # !  - - t  
( (
 $  $) ),c :# ,+S +\RC> RCj,W' ,W^T i2- i2XC 	6( 	6r   