o
    i                     @   sl   d dl mZ d dlmZmZmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ edZG dd	 d	eZd
S )    )Sequence)AnySupportsFloatTypeVar)async_retry_operation)override)AsyncKeyValue)BaseWrapperTc                       s$  e Zd ZdZddddeeffdededed	ed
ede	e
e df ddf fddZdedefddZedddededB deeef dB fddZedddee dedB deeeef dB  fddZedddededB de	eeef dB edB f fddZedddee dedB dee	eeef dB edB f  fddZeddd ded!eeef dedB d"edB ddf
d#d$Zeddd dee d%eeeef  dedB d"eedB  dB ddf
d&d'ZedddededB defd(d)Zedddee dedB defd*d+Z  ZS ),RetryWrappera9  Wrapper that retries failed operations with exponential backoff.

    This wrapper automatically retries operations that fail with specified exceptions,
    using exponential backoff between attempts. This is useful for handling transient
    failures like network issues or temporary service unavailability.
       g?g      $@g       @	key_valuemax_retriesinitial_delay	max_delayexponential_baseretry_on.returnNc                    s2   || _ || _|| _|| _|| _|| _t   dS )a  Initialize the retry wrapper.

        Args:
            key_value: The store to wrap.
            max_retries: Maximum number of retry attempts. Defaults to 3.
            initial_delay: Initial delay in seconds before first retry. Defaults to 0.1.
            max_delay: Maximum delay in seconds between retries. Defaults to 10.0.
            exponential_base: Base for exponential backoff calculation. Defaults to 2.0.
            retry_on: Tuple of exception types to retry on. Defaults to (ConnectionError, TimeoutError).
        N)r   r   r   r   r   r   super__init__)selfr   r   r   r   r   r   	__class__ j/var/www/html/karishye-ai-python/venv/lib/python3.10/site-packages/key_value/aio/wrappers/retry/wrapper.pyr      s   zRetryWrapper.__init__attemptc                 C   s   | j | j|  }t|| jS )zBCalculate the delay for a given attempt using exponential backoff.)r   r   minr   )r   r   delayr   r   r   _calculate_delay1   s   zRetryWrapper._calculate_delay)
collectionkeyr   c             
      .   t | j| j| j| j| j| jj||dI d H S N)r   r   r   r   r   	operationr    r   )r   r   r   r   r   r   r   getr   r    r   r   r   r   r$   6      zRetryWrapper.getkeysc             
      r!   N)r   r   r   r   r   r#   r'   r   )r   r   r   r   r   r   r   get_manyr   r'   r   r   r   r   r)   C   r&   zRetryWrapper.get_manyc             
      r!   r"   )r   r   r   r   r   r   r   ttlr%   r   r   r   r+   P   r&   zRetryWrapper.ttlc             
      r!   r(   )r   r   r   r   r   r   r   ttl_manyr*   r   r   r   r,   ]   r&   zRetryWrapper.ttl_many)r   r+   valuer+   c                   2   t | j| j| j| j| j| jj||||d
I d H S )N)
r   r   r   r   r   r#   r    r-   r   r+   )r   r   r   r   r   r   r   put)r   r    r-   r   r+   r   r   r   r/   j   s   zRetryWrapper.putvaluesc                   r.   )N)
r   r   r   r   r   r#   r'   r0   r   r+   )r   r   r   r   r   r   r   put_many)r   r'   r0   r   r+   r   r   r   r1   y   s   	zRetryWrapper.put_manyc             
      r!   r"   )r   r   r   r   r   r   r   deleter%   r   r   r   r2      r&   zRetryWrapper.deletec             
      r!   r(   )r   r   r   r   r   r   r   delete_manyr*   r   r   r   r3      r&   zRetryWrapper.delete_many)__name__
__module____qualname____doc__ConnectionErrorTimeoutErrorr   intfloattupletype	Exceptionr   r   r   strdictr   r$   listr)   r+   r,   r   r/   r   r1   boolr2   r3   __classcell__r   r   r   r   r      sf    
.6:B8".r   N)collections.abcr   typingr   r   r   key_value.shared.code_gen.runr   typing_extensionsr   !key_value.aio.protocols.key_valuer   key_value.aio.wrappers.baser	   r
   r   r   r   r   r   <module>   s    