
    /
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d%S )&    )ABCabstractmethod)OrderedDict)	dataclass)Enum)AnyListOptionalUnion)	CSCReasonc                       e Zd ZdZdZdS )CacheEntryStatusVALIDIN_PROGRESSN)__name__
__module____qualname__r   r        C:\Users\Dell Inspiron 16\Desktop\tws\AgrotaPowerBi\back-agrota-powerbi\mcp-client-agrota\venv\Lib\site-packages\redis/cache.pyr   r   
   s        EKKKr   r   c                       e Zd ZdZdZdS )EvictionPolicyType
time_basedfrequency_basedN)r   r   r   r   r   r   r   r   r   r      s        J'OOOr   r   T)frozenc                   6    e Zd ZU dZeed<   eed<   dZeed<   dS )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      sC         
 
 LLLJr   r   c                   .    e Zd ZdededefdZd Zd ZdS )
CacheEntry	cache_keycache_valuestatusc                 >    || _         || _        || _        || _        d S 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P
 
 	
r   c                 B    t          |           t          |          k    S r+   )r0   )r-   others     r   __eq__zCacheEntry.__eq__9   s    DzzT%[[((r   N)	r   r   r   r   bytesr   r.   r2   r5   r   r   r   r&   r&   '   sb        
-
- 
- !	
- 
- 
- 
-
 
 

) ) ) ) )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d	S )EvictionPolicyInterfacec                     d S r+   r   r1   s    r   cachezEvictionPolicyInterface.cache>   	     	r   c                     d S r+   r   )r-   values     r   r:   zEvictionPolicyInterface.cacheC   r;   r   returnc                     d S r+   r   r1   s    r   typezEvictionPolicyInterface.typeH   r;   r   c                     d S r+   r   r1   s    r   
evict_nextz"EvictionPolicyInterface.evict_nextM       r   countc                     d S r+   r   r-   rD   s     r   
evict_manyz"EvictionPolicyInterface.evict_manyQ   rC   r   r'   Nc                     d S 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         ^ X \  ^ \ (    ^ X H    ^  X    ^ x D    ^  r   r8   c                       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d	S )
CacheConfigurationInterfacec                     d S r+   r   r1   s    r   get_cache_classz+CacheConfigurationInterface.get_cache_class[   rC   r   r>   c                     d S r+   r   r1   s    r   get_max_sizez(CacheConfigurationInterface.get_max_size_   rC   r   c                     d S r+   r   r1   s    r   get_eviction_policyz/CacheConfigurationInterface.get_eviction_policyc   rC   r   rD   c                     d S r+   r   rF   s     r   is_exceeds_max_sizez/CacheConfigurationInterface.is_exceeds_max_sizeg   rC   r   r   c                     d S 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                      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dS )CacheInterfacer>   c                     d S r+   r   r1   s    r   
collectionzCacheInterface.collectionq   r;   r   c                     d S r+   r   r1   s    r   configzCacheInterface.configv   r;   r   c                     d S r+   r   r1   s    r   eviction_policyzCacheInterface.eviction_policy{   r;   r   c                     d S r+   r   r1   s    r   sizezCacheInterface.size   r;   r   keyNc                     d S r+   r   r-   rf   s     r   getzCacheInterface.get   rC   r   entryc                     d S r+   r   r-   rj   s     r   setzCacheInterface.set   rC   r   
cache_keysc                     d S r+   r   r-   rn   s     r   delete_by_cache_keysz#CacheInterface.delete_by_cache_keys   rC   r   r   c                     d S r+   r   r-   r   s     r   delete_by_redis_keysz#CacheInterface.delete_by_redis_keys   rC   r   c                     d S r+   r   r1   s    r   flushzCacheInterface.flush   rC   r   c                     d S 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   s       K    ^ X 3    ^ X !8    ^ X c    ^ X x E*d*:$;    ^      ^ tH~ $t*    ^ tE{ tDz    ^ s    ^ x D    ^  r   r]   c                   F   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dS )DefaultCachecache_configr>   Nc                     t                      | _        || _        | j                                                                        | _        | | j        _        d S r+   )r   _cache_cache_configrU   r=   _eviction_policyr:   r-   r{   s     r   r.   zDefaultCache.__init__   sK     "mm) $ 2 F F H H N N P 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                  sdS || j        |j        <   | j                            |j                   dS )NFT)rx   r'   r}   r   rJ   rl   s     r   rm   zDefaultCache.set   sK    00 	5',EO$##EO444tr   rf   c                 x    | j                             |d           }|d S | j                            |           |S r+   )r}   ri   r   rJ   )r-   rf   rj   s      r   ri   zDefaultCache.get   s=    T**=4##C(((r   rn   c                     g }|D ]\}|                      |          0| j                            |           |                    d           G|                    d           ]|S )NTF)ri   r}   popappend)r-   rn   responserf   s       r   rq   z!DefaultCache.delete_by_cache_keys   si     	' 	'Cxx}}($$$%%%%&&&&r   r   c                    g }g }|D ]}|g}t          |t                    r)|                    |                    d                     nOt          |t                    r:	 |                    |                    d                     n# t          $ r Y nw xY w| j        D ]Gt          fd|D                       r*|                               |                    d           H|D ]}| j        	                    |           |S )Nzutf-8c              3   *   K   | ]}|j         v V  d S r+   )r   ).0	candidater'   s     r   	<genexpr>z4DefaultCache.delete_by_redis_keys.<locals>.<genexpr>   s+      UUYyI$88UUUUUUr   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   sI    # 	* 	*I#J)S)) !!)"2"27";";<<<<Iu-- %%i&6&6w&?&?@@@@)   D "[ * *	UUUU*UUUUU *")))444OOD)))*
 " 	! 	!CKOOC    s   !(B


BBc                 `    t          | j                  }| j                                         |S r+   )r   r}   clear)r-   
elem_counts     r   rv   zDefaultCache.flush   s+    %%
r   c                 @    | j                             |j                  S r+   )r~   rZ   r   rh   s     r   rx   zDefaultCache.is_cachable   s    !55ckB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    X "3 " " " X" %!8 % % % X%  c       X      x E*d*:$;    
tH~ 
$t* 
 
 
 
UT#Y 67	d   6s    
Cx CD C C C C C 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d
S )
CacheProxyzY
    Proxy object that wraps cache implementations to enable additional logic on top
    r:   c                     || _         d S 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                 6    | j                             |          S r+   )r}   ri   rh   s     r   ri   zCacheProxy.get  s    {s###r   rj   c                     | j                             |          }| j                            | j                  r6ddlm}  |dt          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  s    '';**4955 	.HHHHHH ~     ++---r   rn   c                 6    | j                             |          S r+   )r}   rq   rp   s     r   rq   zCacheProxy.delete_by_cache_keys$      {//
;;;r   r   c                 6    | j                             |          S r+   )r}   rt   rs   s     r   rt   zCacheProxy.delete_by_redis_keys'  r   r   c                 4    | j                                         S r+   )r}   rv   r1   s    r   rv   zCacheProxy.flush*  s    {  """r   c                 6    | 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 & & & X& "3 " " " X" +!8 + + + X+  c       X $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dS )	LRUPolicyc                     d | _         d S 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                     || _         d S 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                 z    |                                   | j        j                            d          }|d         S )NFlastr   )_assert_cacher}   r_   popitem)r-   popped_entrys     r   rB   zLRUPolicy.evict_nextA  s9    {-5555AAAr   rD   c                 $   |                                   |t          | j        j                  k    rt	          d          g }t          |          D ]=}| j        j                            d          }|                    |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Cu 	0 	0A;199u9EEL|A////r   r'   Nc                     |                                   | j        j                            |          t	          d          | j        j                            |           d S )Nz(Given entry does not belong to the cache)r   r}   r_   ri   r   move_to_endrI   s     r   rJ   zLRUPolicy.touchS  s[    ;!%%i008GHHH**955555r   c                 f    | j         t          | j         t                    st          d          d S )Nz6Eviction policy should be associated with valid cache.)r:   r   r]   r   r1   s    r   r   zLRUPolicy._assert_cache[  s2    :Z
N%K%KUVVV 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            X \>    \ -( - - - X-H    
 X    6x 6D 6 6 6 6W W W W Wr   r   c                       e Zd ZeZdS )EvictionPolicyN)r   r   r   r   LRUr   r   r   r   r   `  s        
CCCr   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dS )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                 0    || _         || _        || _        d S 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         k    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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K K K^ ).*A	0 00 0 (	0 0 0 0! ! !c    %^ % % % %& & & & & &23 24 2 2 2 2 2 2r   r   c                   *    e Zd Zedefd            ZdS )CacheFactoryInterfacer>   c                     d S r+   r   r1   s    r   	get_cachezCacheFactoryInterface.get_cache  rC   r   N)r   r   r   r   r]   r  r   r   r   r  r    s9        >    ^  r   r  c                   4    e Zd Zddee         fdZdefdZdS )CacheFactoryNr{   c                 L    || _         | j         t                      | _         d S d S r+   )_configr   r   s     r   r.   zCacheFactory.__init__  s(    #<&==DLLL  r   r>   c                 p    | j                                         }t           || j                             S )N)r{   )r!  rQ   r   )r-   r  s     r   r  zCacheFactory.get_cache  s2    l2244++4<@@@AAAr   r+   )r   r   r   r
   r   r.   r]   r  r   r   r   r  r    s[        ) )Xk%: ) ) ) )B> B B B B 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 4 4 4 4 4         t      
( ( ( ( ( ( ( (
 $       $) ) ) ) ) ) ) ),    c   :    #   ,+ + + + +S + + +\YC YC YC YC YC> YC YC YCx4, 4, 4, 4, 4, 4, 4, 4,n,W ,W ,W ,W ,W' ,W ,W ,W^    T   i2 i2 i2 i2 i2- i2 i2 i2X    C   	B 	B 	B 	B 	B( 	B 	B 	B 	B 	Br   