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   ú=/var/www/html/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