
    9i                    n    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y)
    )annotationsN)ceil)
ModuleType)TYPE_CHECKINGIterable   )MemcachedBridgec                       e Zd Z	 	 	 	 	 	 	 	 d fdZe	 	 d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dd
Z xZS )MemcachioBridgec                6    t        |   ||fi | d | _        y N)super__init___storage)selfuri
dependencyoptions	__class__s       Y/var/www/html/venv/lib/python3.12/site-packages/limits/aio/storage/memcached/memcachio.pyr   zMemcachioBridge.__init__   s      	j4G48<    c                    | j                   j                  j                  | j                   j                  j                  fS r   )r   errorsNoAvailableNodesMemcachioConnectionError)r   s    r   base_exceptionszMemcachioBridge.base_exceptions   s4    
 OO""33OO"";;
 	
r   c                   K   | j                   sK | j                  j                  | j                  D cg c]	  \  }}||f c}}fi | j                  | _         | j                   sJ | j                   S c c}}w wr   )r   r   Clienthostsr   )r   hps      r   get_storagezMemcachioBridge.get_storage!   sh     }}2DOO22$(JJ/DAq!Q/,,DM }}}}}	 0s   2A:A4
8A:c                   K   | j                  |g       d {   j                  |j                  d      d      S 7 #w)Nutf-8r   )get_manygetencoder   keys     r   r&   zMemcachioBridge.get*   s3     mmSE**//

70CQGG*s   ><$>c                *  K    | j                          d{   j                  |D cg c]  }|j                  d       c}  d{   }|j                         D ci c]  \  }}|t	        |j
                         c}}S 7 lc c}w 7 Bc c}}w w)zo
        Return multiple counters at once

        :param keys: the keys to get the counter values for
        Nr$   )r"   r&   r'   itemsintvalue)r   keyskresultsvs        r   r%   zMemcachioBridge.get_many-   s}      7t//1166)-.Aahhw.
 
 -4MMO<DAq3qww<<< 2.
 =s>   BBBBBB	B  B BBBc                   K   | j                          d {   j                  |j                  d             d {    y 7 +7 wNr$   )r"   deleter'   r(   s     r   clearzMemcachioBridge.clear8   s6     %%''//

70CDDD'Ds   AA%AAAAc                   K   | j                          d {   }|j                  d      }|j                  |||       d {   xs dS 7 57 
w)Nr$   )noreplyr   )r"   r'   decr)r   r)   amountr7   storage	limit_keys         r   r8   zMemcachioBridge.decr;   sK     ((**JJw'	\\)VW\EEJJ +Es!   AA,AA	AAc                  K   | j                          d {   }|j                  d      }| j                  |      j                         }|j                  ||       d {   x}| j                          d {   }|j	                  || j                         t        |             d {   rW|rS|j                  |t        |t        j                         z         j                  d      t        |      d       d {    |S | j                          d {   }|j                  ||       d {   xs |S |S 7 ,7 7 7 7 G7 /7 w)Nr$   )expiryF)r=   r7   )	r"   r'   _expiration_keyincraddr   setstrtime)	r   r)   r=   r9   set_expiration_keyr:   r;   
expire_keyr-   s	            r   r?   zMemcachioBridge.incr@   s3     ((**JJw'	))#.557
#LLF;;<EE ,,..G[[vh,>,>,@f[VVV%!++"FTYY[0188A#F| %	 &     $ 0 0 22$\\)V<<FF# + <.V 3<s}   EEA	E E!E:E;3E.E	/AEEEEE7E8EEE	EEEEc                2  K   | j                          d {   }| j                  |      j                  d      }|j                  |       d {   j                  |d       }|xr t	        |j
                        xs t        j                         S 7 |7 Ewr3   )r"   r>   r'   r&   floatr-   rC   )r   r)   r:   expiration_keyitems        r   
get_expiryzMemcachioBridge.get_expiryV   sx     ((**--c299'Bkk.1166~tL)djj)8TYY[8	 +1s"   BB8BBABBc                   K   	 | j                          d{   }|j                  d       d{    y7 7 #  Y yxY ww)zq
        Check if storage is healthy by calling the ``get`` command
        on the key ``limiter-check``
        Ns   limiter-checkTF)r"   r&   )r   r:   s     r   checkzMemcachioBridge.check]   sD     
	 ,,..G++./// //	s/   A: 6: 8: A: : >A)r   rB   r   r   r   zfloat | str | boolreturnNone)rM   z-type[Exception] | tuple[type[Exception], ...])rM   zmemcachio.Client[bytes])r)   rB   rM   r,   )r.   zIterable[str]rM   zdict[bytes, int])r)   rB   rM   rN   )r   F)r)   rB   r9   r,   r7   boolrM   r,   )r   T)
r)   rB   r=   rG   r9   r,   rD   rO   rM   r,   )r)   rB   rM   rG   )rM   rO   )__name__
__module____qualname__r   propertyr   r"   r&   r%   r5   r8   r?   rJ   rL   __classcell__)r   s   @r   r   r      s    == = &	=
 
= 
	6
 
H	=EK TX %/2LP	,9r   r   )
__future__r   rC   mathr   typesr   typingr   r   bridger	   	memcachior    r   r   <module>r\      s+    "    * #Zo Zr   