
    ZeIi                    v    d dl mZ d dlZd dlmZ d dlmZ d dlmZm	Z	 ddl
mZ erd dlZ G d d	e          ZdS )
    )annotationsN)ceil)
ModuleType)TYPE_CHECKINGIterable   )MemcachedBridgec                  ~     e Zd Zd# fd	Zd$dZd%dZd&dZd'dZd(d)dZ	 d*d+dZ	d,dZ
ed-d!            Zd.d"Z xZS )/EmcacheBridgeuristr
dependencyr   optionsfloat | str | boolreturnNonec                L     t                      j        ||fi | d | _        d S N)super__init___storage)selfr   r   r   	__class__s       i/var/www/html/MCyber-Diagnostic/venv/lib/python3.11/site-packages/limits/aio/storage/memcached/emcache.pyr   zEmcacheBridge.__init__   s1     	j44G444    emcache.Clientc                    K    j         s4  j        j         fd j        D             fi  j         d {V  _          j         sJ  j         S )Nc                L    g | ] \  }}j                             ||          !S  )r   MemcachedHostAddress).0hpr   s      r   
<listcomp>z-EmcacheBridge.get_storage.<locals>.<listcomp>   s/    SSS155a;;SSSr   )r   r   create_clienthostsr   r   s   `r   get_storagezEmcacheBridge.get_storage   s      } 	"?$/"?SSSS
SSS# #,# #      DM }}r   keyintc                   K   |                                   d {V                     |                    d                     d {V }|rt          |j                  pdS )Nutf-8r   )r(   getencoder*   value)r   r)   items      r   r-   zEmcacheBridge.get"   sm       ,,........33CJJw4G4GHHHHHHHH'DJ,1,r   keysIterable[str]dict[bytes, int]c                   K   |                                   d {V                     d |D                        d {V }d |                                D             S )Nc                8    g | ]}|                     d           S )r,   )r.   )r!   ks     r   r$   z*EmcacheBridge.get_many.<locals>.<listcomp>(   s$    ---1QXXg---r   c                F    i | ]\  }}||rt          |j                  nd S )r   )r*   r/   )r!   r6   r0   s      r   
<dictcomp>z*EmcacheBridge.get_many.<locals>.<dictcomp>*   s/    QQQgad13tz???QQQr   )r(   get_manyitems)r   r1   resultss      r   r9   zEmcacheBridge.get_many&   s      #//11111111;;-----
 
 
 
 
 
 
 
 RQQQQQr   c                   K   	 |                                   d {V                     |                    d                     d {V  d S # | j        j        $ r Y d S w xY wNr,   )r(   deleter.   r   NotFoundCommandError)r   r)   s     r   clearzEmcacheBridge.clear,   s      	))++++++++33CJJw4G4GHHHHHHHHHHH3 	 	 	DD	s   AA AAr   Famountnoreplyboolc                   K   |                                   d {V }|                    d          }	 |                    |||           d {V pd}n# | j        j        $ r d}Y nw xY w|S )Nr,   )rB   r   )r(   r.   	decrementr   r?   )r   r)   rA   rB   storage	limit_keyr/   s          r   decrzEmcacheBridge.decr2   s      ((********JJw''		!++Ivw+OOOOOOOOTSTEE3 	 	 	EEE	s    A A('A(Texpiryfloatset_expiration_keyc           	     6  K   |                                   d {V }|                    d          }|                     |                                          }	 |                    ||           d {V p|S # | j        j        $ r |                                   d {V }	 |                    ||                                 t          |                     d {V  |r`|                    |t          |t          j
                    z                                 d          t          |          d           d {V  |}nM# | j        j        $ r; |                                   d {V }|                    ||           d {V p|}Y nw xY w|cY S w xY w)Nr,   )exptimeF)rM   rB   )r(   r.   _expiration_key	incrementr   r?   addr   setr   timeNotStoredStorageCommandError)	r   r)   rI   rA   rK   rF   rG   
expire_keyr/   s	            r   incrzEmcacheBridge.incr;   s      ((********JJw''	))#..5577
	 **9f========GG3 	 	 	 ,,........GMkk)[-?-?-A-A4PV<<kXXXXXXXXX% !++"FTY[[01188AA $V %	 &          ?? M M M $ 0 0 2 2222222%//	6BBBBBBBBLfM LLL!	s8   A8 8*F#B"EFAFFFFFc                  K   |                                   d {V }|                    |                     |                              d                     d {V }|rt	          |j                  pt          j                    S r=   )r(   r-   rN   r.   rJ   r/   rR   )r   r)   rF   r0   s       r   
get_expiryzEmcacheBridge.get_expiryU   s      ((********[[!5!5c!:!:!A!A'!J!JKKKKKKKK)dj))8TY[[8r   -type[Exception] | tuple[type[Exception], ...]c                2    | j         j        | j         j        fS r   )r   ClusterNoAvailableNodesCommandErrorr'   s    r   base_exceptionszEmcacheBridge.base_exceptions\   s    
 O3O(
 	
r   c                   K   	 |                                   d{V }|                    d           d{V  dS #  Y dS xY w)zq
        Check if storage is healthy by calling the ``get`` command
        on the key ``limiter-check``
        Ns   limiter-checkTF)r(   r-   )r   rF   s     r   checkzEmcacheBridge.checke   sh      
	 ,,........G++./////////4	55s	   5; A )r   r   r   r   r   r   r   r   )r   r   )r)   r   r   r*   )r1   r2   r   r3   )r)   r   r   r   )r   F)r)   r   rA   r*   rB   rC   r   r*   )r   T)
r)   r   rI   rJ   rA   r*   rK   rC   r   r*   )r)   r   r   rJ   )r   rX   )r   rC   )__name__
__module____qualname__r   r(   r-   r9   r@   rH   rU   rW   propertyr\   r^   __classcell__)r   s   @r   r   r      s               - - - -R R R R        TX    4    
 
 
 X
       r   r   )
__future__r   rR   mathr   typesr   limits.typingr   r   bridger	   emcacher   r   r   r   <module>rj      s    " " " " " "              1 1 1 1 1 1 1 1 # # # # # # NNNa a a a aO a a a a ar   