
    keJi'                        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d"S )#    )ABCabstractmethod)OrderedDict)	dataclass)Enum)AnyListOptionalUnionc                       e Zd ZdZdZdS )CacheEntryStatusVALIDIN_PROGRESSN)__name__
__module____qualname__r   r        Q/var/www/html/movieo_spanner_bot/venv/lib/python3.11/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__2   s*    ^T-t{D<OP
 
 	
r   c                 B    t          |           t          |          k    S r*   )r/   )r,   others     r   __eq__zCacheEntry.__eq__7   s    DzzT%[[((r   N)	r   r   r   r   bytesr   r-   r1   r4   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   r0   s    r   cachezEvictionPolicyInterface.cache<   	     	r   c                     d S r*   r   )r,   values     r   r9   zEvictionPolicyInterface.cacheA   r:   r   returnc                     d S r*   r   r0   s    r   typezEvictionPolicyInterface.typeF   r:   r   c                     d S r*   r   r0   s    r   
evict_nextz"EvictionPolicyInterface.evict_nextK       r   countc                     d S r*   r   r,   rC   s     r   
evict_manyz"EvictionPolicyInterface.evict_manyO   rB   r   r&   Nc                     d S 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         ^ X \  ^ \ (    ^ X H    ^  X    ^ x D    ^  r   r7   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   r0   s    r   get_cache_classz+CacheConfigurationInterface.get_cache_classY   rB   r   r=   c                     d S r*   r   r0   s    r   get_max_sizez(CacheConfigurationInterface.get_max_size]   rB   r   c                     d S r*   r   r0   s    r   get_eviction_policyz/CacheConfigurationInterface.get_eviction_policya   rB   r   rC   c                     d S r*   r   rE   s     r   is_exceeds_max_sizez/CacheConfigurationInterface.is_exceeds_max_sizee   rB   r   r   c                     d S 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                      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   r0   s    r   
collectionzCacheInterface.collectiono   r:   r   c                     d S r*   r   r0   s    r   configzCacheInterface.configt   r:   r   c                     d S r*   r   r0   s    r   eviction_policyzCacheInterface.eviction_policyy   r:   r   c                     d S r*   r   r0   s    r   sizezCacheInterface.size~   r:   r   keyNc                     d S r*   r   r,   re   s     r   getzCacheInterface.get   rB   r   entryc                     d S r*   r   r,   ri   s     r   setzCacheInterface.set   rB   r   
cache_keysc                     d S r*   r   )r,   rm   s     r   delete_by_cache_keysz#CacheInterface.delete_by_cache_keys   rB   r   r   c                     d S r*   r   )r,   r   s     r   delete_by_redis_keysz#CacheInterface.delete_by_redis_keys   rB   r   c                     d S r*   r   r0   s    r   flushzCacheInterface.flush   rB   r   c                     d S 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   s       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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dS )DefaultCachecache_configr=   Nc                     t                      | _        || _        | j                                                                        | _        | | j        _        d S r*   )r   _cache_cache_configrT   r<   _eviction_policyr9   r,   rx   s     r   r-   zDefaultCache.__init__   sK     "mm) $ 2 F F H H N N P 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                 $   |                      |j                  sdS || j        |j        <   | j                            |j                   | j                            t          | j                            r| j                                         dS )NFT)	ru   r&   rz   r|   rI   r{   rV   r   rA   rk   s     r   rl   zDefaultCache.set   s    00 	5',EO$##EO44411#dk2B2BCC 	/!,,...tr   re   c                 x    | j                             |d           }|d S | j                            |           |S r*   )rz   rh   r|   rI   )r,   re   ri   s      r   rh   zDefaultCache.get   s=    T**=4##C(((r   rm   c                     g }|D ]\}|                      |          0| j                            |           |                    d           G|                    d           ]|S )NTF)rh   rz   popappend)r,   rm   responsere   s       r   ro   z!DefaultCache.delete_by_cache_keys   si     	' 	'Cxx}}($$$%%%%&&&&r   r   c                 "   g }g }|D ]h}t          |t                    r|                                }| j        D ]5}||j        v r*|                    |           |                    d           6i|D ]}| 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44OOD)))*
 " 	! 	!CKOOC    r   c                 `    t          | j                  }| j                                         |S r*   )r   rz   clear)r,   
elem_counts     r   rs   zDefaultCache.flush   s+    %%
r   c                 @    | j                             |j                  S r*   )r{   rY   r   rg   s     r   ru   zDefaultCache.is_cachable   s    !55ckB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    X "3 " " " X" %!8 % % % X%  c       X 
 
 
 
 
 
x E*d*:$;    
tH~ 
$t* 
 
 
 
tE{ tDz    "s    
Cx CD C C C C C 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dS )	LRUPolicyc                     d | _         d S 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                     || _         d S 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                 z    |                                   | j        j                            d          }|d         S )NFlastr   )_assert_cacherz   r^   popitem)r,   popped_entrys     r   rA   zLRUPolicy.evict_next  s9    {-5555AAAr   rC   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   rz   r^   
ValueErrorranger   r   )r,   rC   popped_keys_r   s        r   rF   zLRUPolicy.evict_many  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   rz   r^   rh   r   move_to_endrH   s     r   rI   zLRUPolicy.touch  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.)r9   r   r\   r   r0   s    r   r   zLRUPolicy._assert_cache  s2    :Z
N%K%KUVVV r   )r   r   r   r-   rJ   r9   rK   r\   r   r?   r   rA   rL   r	   rF   rI   r   r   r   r   r   r      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_classrb   c                 0    || _         || _        || _        d S 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         k    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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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   r0   s    r   	get_cachezCacheFactoryInterface.get_cache  rB   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 )CacheFactoryNrx   c                 L    || _         | j         t                      | _         d S d S r*   )_configr   r}   s     r   r-   zCacheFactory.__init__  s(    #<&==DLLL  r   r=   c                 V    | j                                         } || j                   S )N)rx   )r  rP   )r,   r   s     r   r   zCacheFactory.get_cache  s*    l2244{5555r   r*   )r   r   r   r
   r   r-   r\   r   r   r   r   r   r     sT        ) )Xk%: ) ) ) )6> 6 6 6 6 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 RC RC RC> RC RC RCj,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   	6 	6 	6 	6 	6( 	6 	6 	6 	6 	6r   