
    ^g                        d dl mZ d dlZd dlZd dlZd dlmZ d dlm	Z	 d dl
mZ d dlmZ erd dlZ e	d       G d	 d
e             Zy)    )annotationsN)TYPE_CHECKING)
deprecated)Storage)ConcurrentUpdateErrorz4.4)versionc                       e Zd ZdZdgZ	 dgZdZdZedf	 	 	 	 	 	 	 	 	 d fdZe		 	 dd       Z
dd	Z	 d	 	 	 	 	 	 	 	 	 dd
ZddZddZddZddZddZ xZS )EtcdStoragezQ
    Rate limit storage with etcd as backend.

    Depends on :pypi:`aetcd`.
    z
async+etcdaetcdlimits   Fc                    t         j                  j                  |      }| j                  d   j                  | _         | j
                  j                  d|j                  |j                  d|| _	        || _
        t        | 1  ||       y)a.  
        :param uri: etcd location of the form
         ``async+etcd://host:port``,
        :param max_retries: Maximum number of attempts to retry
         in the case of concurrent updates to a rate limit key
        :param wrap_exceptions: Whether to wrap storage exceptions in
         :exc:`limits.errors.StorageError` before raising it.
        :param options: all remaining keyword arguments are passed
         directly to the constructor of :class:`aetcd.client.Client`
        :raise ConfigurationError: when :pypi:`aetcd` is not available
        r   )hostport)wrap_exceptionsN )urllibparseurlparsedependenciesmodulelibClienthostnamer   storagemax_retriessuper__init__)selfurir   r   optionsparsed	__class__s         ^/var/www/html/suriana-translation/venv/lib/python3.12/site-packages/limits/aio/storage/etcd.pyr   zEtcdStorage.__init__    s}    $ &&s+$$W-44%4TXX__ &
v{{&
6=&
 'o>    c                .    | j                   j                  S N)r   ClientErrorr   s    r$   base_exceptionszEtcdStorage.base_exceptions:   s     xx###r%   c                @    | j                    d| j                         S N/)PREFIXencoder   keys     r$   prefixed_keyzEtcdStorage.prefixed_key@   s     ++au%,,..r%   c           	       K   d}| j                  |      }|| j                  k  rt        j                         }| j                  j	                  |       d {   }||z   }	| j                  j                  | j                  j                  j                  |      dk(  g| j                  j                  j                  || d|	 j                         |j                        g| j                  j                  j                  |      g       d {   }
|
d   r|S |
d   d   d   d   }|j                  j                  d      \  }}	t        |	      }	|	|k  r[t        j                   | j                  j#                  |j                        | j                  j%                  |             d {    n|r2| j                  j'                  |j                         d {    ||z   }	t)        |      |z   }| j                  j                  | j                  j                  j                  |      |j                  k(  g| j                  j                  j                  || d|	 j                         |j                        gg        d {   d   r|S |dz  }|| j                  k  rt+        ||      7 a7 7 7 7 6w)Nr      0:)lease)comparesuccessfailure      :)r2   r   timer   r6   transactiontransactionscreateputr/   idgetvaluesplitfloatasynciogatherrevoke_leasedeleterefresh_leaseintr   )r   r1   expiryelastic_expiryamountretriesetcd_keynowr6   
window_endcreate_attemptcur	cur_valuenews                 r$   incrzEtcdStorage.incrC   s     $$S)((())+C,,,,V44EvJ#'<<#;#;2299(CtKLLL--11 VHAj\":"A"A"C588 2 
 2266x@A $< $ N a $Q'*1-a0(+		(=%	:":.
$!..11#))<++H5  
 &"ll88CCC%(6\
i.61C"ll66 $ 9 9 ? ? ISYY V% !% 9 9 = =$,'*e1ZL$9$@$@$B*-)) !> !"% %' 7     #
1[ (((\ $C11Y 5  Dsc   AKJ9B9KJ<BK/J?0/KK B-KKK-K<K?KKKc                
  K   | j                   j                  | j                  |             d {   }|rI|j                  j	                  d      \  }}t        |      t        j                         kD  rt        |      S y7 Pw)Nr;   r   )r   rB   r2   rC   rD   rE   r<   rK   )r   r1   rT   rN   rL   s        r$   rB   zEtcdStorage.getx   se     LL$$T%6%6s%;<< YY__T2NFFV}tyy{*6{" =s   .BBABc                   K   | j                   j                  | j                  |             d {   }|r)t        |j                  j                  d      d         }|S t        j                         S 7 Cw)Nr;   r:   )r   rB   r2   rE   rC   rD   r<   )r   r1   rT   rR   s       r$   
get_expiryzEtcdStorage.get_expiry   s^     LL$$T%6%6s%;<<syyt4Q78Jyy{	 =s   .A6A4AA6c                d   K   	 | j                   j                          d {    y7 #  Y yxY ww)NTF)r   statusr)   s    r$   checkzEtcdStorage.check   s2     	,,%%''' (	s    0) ') 0) -0c                   K   | j                   j                  | j                   dj                                d {   j                  S 7 wr,   )r   delete_prefixr.   r/   deletedr)   s    r$   resetzEtcdStorage.reset   s;     ll00DKK=1B1I1I1KLLUUULs   :AAAc                t   K   | j                   j                  | j                  |             d {    y 7 wr'   )r   rI   r2   r0   s     r$   clearzEtcdStorage.clear   s)     ll!!$"3"3C"8999s   .868)
r    strr   rK   r   boolr!   rd   returnNone)rf   z-type[Exception] | tuple[type[Exception], ...])r1   rd   rf   bytes)Fr:   )
r1   rd   rL   rK   rM   re   rN   rK   rf   rK   )r1   rd   rf   rK   )r1   rd   rf   rE   )rf   re   )rf   z
int | None)r1   rd   rf   rg   )__name__
__module____qualname____doc__STORAGE_SCHEMEDEPENDENCIESr.   MAX_RETRIESr   propertyr*   r2   rW   rB   rZ   r]   ra   rc   __classcell__)r#   s   @r$   r
   r
      s     #^N+9LFK
 ' %	?? ? 	?
 ? 
?4 $	6$ $
/ RS3232 #325932KN32	32jV:r%   r
   )
__future__r   rF   r<   urllib.parser   typingr   deprecated.sphinxr   limits.aio.storage.baser   limits.errorsr   r   r
   r   r%   r$   <module>rx      sF    "      ( + / E@:' @: @:r%   