o
    KDi                     @  sh   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	 d	eZdS )
    )annotationsN)ceil)
ModuleType)TYPE_CHECKINGIterable   )MemcachedBridgec                      s   e Zd Zd- fd	d
Zd.ddZd/ddZd0ddZd1ddZd2d3ddZ	 d4d5d$d%Z	d6d&d'Z
ed7d)d*Zd8d+d,Z  ZS )9EmcacheBridgeuristr
dependencyr   optionsfloat | str | boolreturnNonec                   s    t  j||fi | d | _d S N)super__init___storage)selfr
   r   r   	__class__ ]/var/www/Datamplify/venv/lib/python3.10/site-packages/limits/aio/storage/memcached/emcache.pyr      s   
zEmcacheBridge.__init__emcache.Clientc                   sF    j s jj fdd jD fi  jI d H  _  j s J  j S )Nc                   s   g | ]\}} j ||qS r   )r   MemcachedHostAddress).0hpr   r   r   
<listcomp>   s    z-EmcacheBridge.get_storage.<locals>.<listcomp>)r   r   create_clienthostsr   r   r   r   r   get_storage   s   
zEmcacheBridge.get_storagekeyintc                   s4   |   I d H |dI d H }|rt|jpdS )Nutf-8r   )r#   getencoder%   value)r   r$   itemr   r   r   r'   "   s    zEmcacheBridge.getkeysIterable[str]dict[bytes, int]c                   s8   |   I d H dd |D I d H }dd | D S )Nc                 S  s   g | ]}| d qS )r&   )r(   )r   kr   r   r   r    (   s    z*EmcacheBridge.get_many.<locals>.<listcomp>c                 S  s$   i | ]\}}||rt |jnd qS )r   )r%   r)   )r   r.   r*   r   r   r   
<dictcomp>*   s   $ z*EmcacheBridge.get_many.<locals>.<dictcomp>)r#   get_manyitems)r   r+   resultsr   r   r   r0   &   s
   
zEmcacheBridge.get_manyc                   sB   z|   I d H |dI d H  W d S  | jjy    Y d S w Nr&   )r#   deleter(   r   NotFoundCommandError)r   r$   r   r   r   clear,   s   &zEmcacheBridge.clearr   Famountnoreplyboolc                   sX   |   I d H }|d}z|j|||dI d H pd}W |S  | jjy+   d}Y |S w )Nr&   )r8   r   )r#   r(   	decrementr   r5   )r   r$   r7   r8   storage	limit_keyr)   r   r   r   decr2   s   
zEmcacheBridge.decrTexpiryfloatset_expiration_keyc           	        s  |   I d H }|d}| | }z|||I d H p|W S  | jjy   |   I d H }z0|j||  t|dI d H  |rZ|j|t	|t

  dt|ddI d H  |}W | Y S  | jjy   |   I d H }|||I d H pz|}Y | Y S w w )Nr&   )exptimeF)rA   r8   )r#   r(   _expiration_key	incrementr   r5   addr   setr   timeNotStoredStorageCommandError)	r   r$   r>   r7   r@   r;   r<   
expire_keyr)   r   r   r   incr;   s2   
 zEmcacheBridge.incrc                   sB   |   I d H }|| |dI d H }|rt|jp t S r3   )r#   r'   rB   r(   r?   r)   rF   )r   r$   r;   r*   r   r   r   
get_expiryU   s   zEmcacheBridge.get_expiry-type[Exception] | tuple[type[Exception], ...]c                 C  s   | j j| j jfS r   )r   ClusterNoAvailableNodesCommandErrorr   r   r   r   base_exceptions\   s   zEmcacheBridge.base_exceptionsc                   s4   z|   I dH }|dI dH  W dS    Y dS )zq
        Check if storage is healthy by calling the ``get`` command
        on the key ``limiter-check``
        Ns   limiter-checkTF)r#   r'   )r   r;   r   r   r   checke   s   zEmcacheBridge.check)r
   r   r   r   r   r   r   r   )r   r   )r$   r   r   r%   )r+   r,   r   r-   )r$   r   r   r   )r   F)r$   r   r7   r%   r8   r9   r   r%   )r   T)
r$   r   r>   r?   r7   r%   r@   r9   r   r%   )r$   r   r   r?   )r   rK   )r   r9   )__name__
__module____qualname__r   r#   r'   r0   r6   r=   rI   rJ   propertyrN   rO   __classcell__r   r   r   r   r	      s    
	
	



r	   )
__future__r   rF   mathr   typesr   limits.typingr   r   bridger   emcacher	   r   r   r   r   <module>   s    