o
    >hM%                     @   s&  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 deZG dd	 d	eZed
dG dd dZG dd dZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG d 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    r   r   k/var/www/vedio/testing/chatpythonscript.ninositsolution.com/env/lib/python3.10/site-packages/redis/cache.pyr          r   c                   @   r   )EvictionPolicyType
time_basedfrequency_basedN)r   r   r   r   r   r   r   r   r   r      r   r   T)frozenc                   @   s   e Zd ZU eed< eed< dS )CacheKeycommand
redis_keysN)r   r   r   str__annotations__tupler   r   r   r   r      s   
 r   c                   @   s2   e Zd ZdededefddZdd Zdd	 Zd
S )
CacheEntry	cache_keycache_valuestatusc                 C   s   || _ || _|| _|| _d S N)r    r!   r"   connection_ref)selfr    r!   r"   r$   r   r   r   __init__   s   
zCacheEntry.__init__c                 C   s   t | j| j| j| jfS r#   )hashr    r!   r"   r$   r%   r   r   r   __hash__%   s   zCacheEntry.__hash__c                 C   s   t | t |kS r#   )r'   )r%   otherr   r   r   __eq__*   s   zCacheEntry.__eq__N)	r   r   r   r   bytesr   r&   r)   r+   r   r   r   r   r      s    
r   c                   @   s   e Zd Zeedd Zejdd ZeedefddZede	fddZ
ed	edee	 fd
dZede	ddfddZdS )EvictionPolicyInterfacec                 C      d S r#   r   r(   r   r   r   cache/      zEvictionPolicyInterface.cachec                 C   r.   r#   r   )r%   valuer   r   r   r/   4      returnc                 C   r.   r#   r   r(   r   r   r   type8   r0   zEvictionPolicyInterface.typec                 C   r.   r#   r   r(   r   r   r   
evict_next=   r2   z"EvictionPolicyInterface.evict_nextcountc                 C   r.   r#   r   r%   r6   r   r   r   
evict_manyA   r2   z"EvictionPolicyInterface.evict_manyr    Nc                 C   r.   r#   r   r%   r    r   r   r   touchE   r2   zEvictionPolicyInterface.touch)r   r   r   propertyr   r/   setterr   r4   r   r5   intr   r8   r:   r   r   r   r   r-   .   s    
r-   c                   @   sb   e Zd Zedd ZedefddZedd Zededefd	d
Z	ede
defddZdS )CacheConfigurationInterfacec                 C   r.   r#   r   r(   r   r   r   get_cache_classK   r2   z+CacheConfigurationInterface.get_cache_classr3   c                 C   r.   r#   r   r(   r   r   r   get_max_sizeO   r2   z(CacheConfigurationInterface.get_max_sizec                 C   r.   r#   r   r(   r   r   r   get_eviction_policyS   r2   z/CacheConfigurationInterface.get_eviction_policyr6   c                 C   r.   r#   r   r7   r   r   r   is_exceeds_max_sizeW   r2   z/CacheConfigurationInterface.is_exceeds_max_sizer   c                 C   r.   r#   r   r%   r   r   r   r   is_allowed_to_cache[   r2   z/CacheConfigurationInterface.is_allowed_to_cacheN)r   r   r   r   r?   r=   r@   rA   boolrB   r   rD   r   r   r   r   r>   J   s    

r>   c                   @   s   e Zd ZeedefddZeedefddZeede	fddZ
eedefdd	Zed
edeedf fddZededefddZedee dee fddZedee dee fddZedefddZed
edefddZdS )CacheInterfacer3   c                 C   r.   r#   r   r(   r   r   r   
collectiona   r0   zCacheInterface.collectionc                 C   r.   r#   r   r(   r   r   r   configf   r0   zCacheInterface.configc                 C   r.   r#   r   r(   r   r   r   eviction_policyk   r0   zCacheInterface.eviction_policyc                 C   r.   r#   r   r(   r   r   r   sizep   r0   zCacheInterface.sizekeyNc                 C   r.   r#   r   r%   rK   r   r   r   getu   r2   zCacheInterface.getentryc                 C   r.   r#   r   r%   rN   r   r   r   sety   r2   zCacheInterface.set
cache_keysc                 C   r.   r#   r   )r%   rQ   r   r   r   delete_by_cache_keys}   r2   z#CacheInterface.delete_by_cache_keysr   c                 C   r.   r#   r   )r%   r   r   r   r   delete_by_redis_keys   r2   z#CacheInterface.delete_by_redis_keysc                 C   r.   r#   r   r(   r   r   r   flush   r2   zCacheInterface.flushc                 C   r.   r#   r   rL   r   r   r   is_cachable   r2   zCacheInterface.is_cachable)r   r   r   r;   r   r   rG   r>   rH   r-   rI   r=   rJ   r   r
   r   rM   rE   rP   r   rR   r,   rS   rT   rU   r   r   r   r   rF   `   s2    rF   c                   @   s   e Zd ZdeddfddZedefddZedefdd	Zede	fd
dZ
edefddZdedefddZdedeedf fddZdee dee fddZdee dee fddZdefddZdedefddZdS )DefaultCachecache_configr3   Nc                 C   s*   t  | _|| _| j  | _| | j_d S r#   )r   _cache_cache_configrA   r1   _eviction_policyr/   r%   rW   r   r   r   r&      s   zDefaultCache.__init__c                 C      | j S r#   rX   r(   r   r   r   rG         zDefaultCache.collectionc                 C   r\   r#   )rY   r(   r   r   r   rH      r^   zDefaultCache.configc                 C   r\   r#   rZ   r(   r   r   r   rI      r^   zDefaultCache.eviction_policyc                 C   s
   t | jS r#   )lenrX   r(   r   r   r   rJ         
zDefaultCache.sizerN   c                 C   sJ   |  |jsdS || j|j< | j|j | jt| jr#| j  dS )NFT)	rU   r    rX   rZ   r:   rY   rB   r`   r5   rO   r   r   r   rP      s   
zDefaultCache.setrK   c                 C   s*   | j |d }|d u rd S | j| |S r#   )rX   rM   rZ   r:   )r%   rK   rN   r   r   r   rM      s
   zDefaultCache.getrQ   c                 C   sB   g }|D ]}|  |d ur| j| |d q|d q|S )NTF)rM   rX   popappend)r%   rQ   responserK   r   r   r   rR      s   z!DefaultCache.delete_by_cache_keysr   c                 C   sh   g }g }|D ] }t |tr| }| jD ]}||jv r%|| |d qq|D ]}| j| q)|S )NT)
isinstancer,   decoderX   r   rc   rb   )r%   r   rd   keys_to_delete	redis_keyr    rK   r   r   r   rS      s   




z!DefaultCache.delete_by_redis_keysc                 C   s   t | j}| j  |S r#   )r`   rX   clear)r%   
elem_countr   r   r   rT      s   

zDefaultCache.flushc                 C   s   | j |jS r#   )rY   rD   r   rL   r   r   r   rU      s   zDefaultCache.is_cachable)r   r   r   r>   r&   r;   r   rG   rH   r-   rI   r=   rJ   r   rE   rP   r   r
   rM   r   rR   r,   rS   rT   rU   r   r   r   r   rV      s(    
		rV   c                   @   s   e Zd Zdd Zedd ZejdefddZedefdd	Z	de
fd
dZdedee
 fddZde
ddfddZdd ZdS )	LRUPolicyc                 C   s
   d | _ d S r#   )r/   r(   r   r   r   r&         
zLRUPolicy.__init__c                 C   r\   r#   r]   r(   r   r   r   r/      r^   zLRUPolicy.cacher/   c                 C   s
   || _ d S r#   r]   )r%   r/   r   r   r   r/      ra   r3   c                 C   s   t jS r#   )r   r   r(   r   r   r   r4      r^   zLRUPolicy.typec                 C   s    |    | jjjdd}|d S )NFlastr   )_assert_cacherX   rG   popitem)r%   popped_entryr   r   r   r5      s   zLRUPolicy.evict_nextr6   c                 C   sT   |    |t| jjkrtdg }t|D ]}| jjjdd}||d  q|S )Nz#Evictions count is above cache sizeFrm   r   )ro   r`   rX   rG   
ValueErrorrangerp   rc   )r%   r6   popped_keys_rq   r   r   r   r8      s   zLRUPolicy.evict_manyr    Nc                 C   s4   |    | jj|d u rtd| jj| d S )Nz(Given entry does not belong to the cache)ro   rX   rG   rM   rr   move_to_endr9   r   r   r   r:     s   zLRUPolicy.touchc                 C   s"   | j d u st| j tstdd S )Nz6Eviction policy should be associated with valid cache.)r/   re   rF   rr   r(   r   r   r   ro     s   zLRUPolicy._assert_cache)r   r   r   r&   r;   r/   r<   rF   r   r4   r   r5   r=   r   r8   r:   ro   r   r   r   r   rk      s    
rk   c                   @   s   e Zd ZeZdS )EvictionPolicyN)r   r   r   rk   LRUr   r   r   r   rw     s    rw   c                   @   s   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dZdd	 Zd
e
fddZd
efddZde
d
efddZded
efd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_classrI   c                 C   s   || _ || _|| _d S r#   )_cache_class	_max_sizerZ   )r%   r   r   rI   r   r   r   r&   h  s   
zCacheConfig.__init__c                 C   r\   r#   )r   r(   r   r   r   r?   r     zCacheConfig.get_cache_classr3   c                 C   r\   r#   r   r(   r   r   r   r@   u  r   zCacheConfig.get_max_sizec                 C   r\   r#   r_   r(   r   r   r   rA   x  r   zCacheConfig.get_eviction_policyr6   c                 C   s
   || j kS r#   r   r7   r   r   r   rB   {  rl   zCacheConfig.is_exceeds_max_sizer   c                 C   s
   || j v S r#   )DEFAULT_ALLOW_LISTrC   r   r   r   rD   ~  rl   zCacheConfig.is_allowed_to_cacheN)r   r   r   rV   DEFAULT_CACHE_CLASSrw   rx   DEFAULT_EVICTION_POLICYDEFAULT_MAX_SIZEr   r=   r   r&   r?   r@   rA   rE   rB   r   rD   r   r   r   r   ry     s(    O

ry   c                   @   s   e Zd ZedefddZdS )CacheFactoryInterfacer3   c                 C   r.   r#   r   r(   r   r   r   	get_cache  r2   zCacheFactoryInterface.get_cacheN)r   r   r   r   rF   r   r   r   r   r   r     s    r   c                   @   s.   e Zd Zddee fddZdefddZdS )	CacheFactoryNrW   c                 C   s    || _ | j d u rt | _ d S d S r#   )_configry   r[   r   r   r   r&     s   
zCacheFactory.__init__r3   c                 C   s   | j  }|| j dS )N)rW   )r   r?   )r%   r   r   r   r   r     s   
zCacheFactory.get_cacher#   )r   r   r   r	   ry   r&   rF   r   r   r   r   r   r     s    r   N)abcr   r   collectionsr   dataclassesr   enumr   typingr   r   r	   r
   r   r   r   r   r-   r>   rF   rV   rk   rw   ry   r   r   r   r   r   r   <module>   s&    .U/l