
    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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 )EmcacheBridgec                6    t        |   ||fi | d | _        y N)super__init___storage)selfuri
dependencyoptions	__class__s       W/var/www/html/venv/lib/python3.12/site-packages/limits/aio/storage/memcached/emcache.pyr   zEmcacheBridge.__init__   s      	j4G4    c           
     <  K   | j                   sk | j                  j                  | j                  D cg c]!  \  }}| j                  j	                  ||      # c}}fi | j
                   d {   | _         | j                   sJ | j                   S c c}}w 7 )wr   )r   r   create_clienthostsMemcachedHostAddressr   )r   hps      r   get_storagezEmcacheBridge.get_storage   s     }}"?$//"?"?HL

S155a;S#,,# DM }}}}}	 Ts   2B&B
B0B1*Bc                   K   | j                          d {   j                  |j                  d             d {   }|xr t        |j                        xs dS 7 G7 #wNutf-8r   )r   getencodeintvalue)r   keyitems      r   r"   zEmcacheBridge.get"   sO      ,,..33CJJw4GHH'DJJ,1, /Hs   A"A%A"A "A" A"c                6  K   | j                          d {   j                  |D cg c]  }|j                  d       c}       d {   }|j                         D ci c]  \  }}||rt	        |j
                        nd! c}}S 7 sc c}w 7 Fc c}}w wr    )r   get_manyr#   itemsr$   r%   )r   keyskresultsr'   s        r   r)   zEmcacheBridge.get_many&   s     #//11;;(,-1QXXg-
 
 BIQgad3tzz?1QQ 2-
 Rs>   BB
BB 
B
BB"$BBBBc                   K   	 | j                          d {   j                  |j                  d             d {    y 7 +7 # | j                  j                  $ r Y y w xY wwNr!   )r   deleter#   r   NotFoundCommandError)r   r&   s     r   clearzEmcacheBridge.clear,   sV     	))++33CJJw4GHHH+H33 		sH   A&A A%A AA A&A A A# A&"A##A&c                   K   | j                          d {   }|j                  d      }	 |j                  |||       d {   xs d}|S 7 87 # | j                  j                  $ r d}Y |S w xY ww)Nr!   )noreplyr   )r   r#   	decrementr   r1   )r   r&   amountr4   storage	limit_keyr%   s          r   decrzEmcacheBridge.decr2   s     ((**JJw'		!++Ivw+OOTSTE  + P33 	E	sD   A5AA5A AA A5A A2.A51A22A5c           	     "  K   | j                          d {   }|j                  d      }| j                  |      j                         }	 |j                  ||       d {   xs |S 7 S7 
# | j                  j
                  $ r | j                          d {  7  }	 |j                  || j                         t        |             d {  7   |rT|j                  |t        |t        j                         z         j                  d      t        |      d       d {  7   |}nW# | j                  j                  $ r; | j                          d {  7  }|j                  ||       d {  7  xs |}Y nw xY w|cY S w xY ww)Nr!   )exptimeF)r;   r4   )r   r#   _expiration_key	incrementr   r1   addr   setstrtimeNotStoredStorageCommandError)	r   r&   expiryr6   set_expiration_keyr7   r8   
expire_keyr%   s	            r   incrzEmcacheBridge.incr;   sh     ((**JJw'	))#.557
	 **9f==GG	 + >33 	 ,,...GMkk)x-?-?-A4PV<kXXX%!++"FTYY[0188A $V %	 &    ???? M $ 0 0 222%//	6BBBLfM L!	s   FA*4FA. !A,"A. )F,A. .-FBF"/D0CAD0'D*(D0/F0,FEF7E:8	FFFF	FFFc                  K   | j                          d {   }|j                  | j                  |      j                  d             d {   }|xr t	        |j
                        xs t        j                         S 7 j7 5wr/   )r   r"   r<   r#   floatr%   rA   )r   r&   r7   r'   s       r   
get_expiryzEmcacheBridge.get_expiryU   sf     ((**[[!5!5c!:!A!A'!JKK)djj)8TYY[8 +Ks!   BB6BB4BBc                Z    | j                   j                  | j                   j                  fS r   )r   ClusterNoAvailableNodesCommandError)r   s    r   base_exceptionszEmcacheBridge.base_exceptions\   s(    
 OO33OO((
 	
r   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   r7   s     r   checkzEmcacheBridge.checke   sD     
	 ,,..G++./// //	s/   A: 6: 8: A: : >A)r   r@   r   r   r   zfloat | str | boolreturnNone)rP   zemcache.Client)r&   r@   rP   r$   )r+   zIterable[str]rP   zdict[bytes, int])r&   r@   rP   rQ   )r   F)r&   r@   r6   r$   r4   boolrP   r$   )r   T)
r&   r@   rC   rH   r6   r$   rD   rR   rP   r$   )r&   r@   rP   rH   )rP   z-type[Exception] | tuple[type[Exception], ...])rP   rR   )__name__
__module____qualname__r   r   r"   r)   r2   r9   rF   rI   propertyrM   rO   __classcell__)r   s   @r   r   r      s      &	
 
-R TX %/2LP	4 
	6
 
r   r   )
__future__r   rA   mathr   typesr   limits.typingr   r   bridger	   emcacher    r   r   <module>r_      s+    "    1 #aO ar   