o
    Š¨Êh«  ã                   @   sn   d dl mZ d dlmZmZmZmZmZmZm	Z	 d dl
mZmZmZ er*d dlmZ e	dƒZG dd„ dƒZdS )	é    )Úsleep)ÚTYPE_CHECKINGÚAnyÚ	AwaitableÚCallableÚTupleÚTypeÚTypeVar)ÚConnectionErrorÚ
RedisErrorÚTimeoutError)ÚAbstractBackoffÚTc                	   @   sx   e Zd ZdZdZeeffdddedee	e
 df fdd	„Zd
efdd„Zdeg ee f dee
gef defdd„ZdS )ÚRetryz0Retry a specific number of times after a failure©Ú_backoffÚ_retriesÚ_supported_errorsÚbackoffr   ÚretriesÚsupported_errors.c                 C   s   || _ || _|| _dS )a'  
        Initialize a `Retry` object with a `Backoff` object
        that retries a maximum of `retries` times.
        `retries` can be negative to retry forever.
        You can specify the types of supported errors which trigger
        a retry with the `supported_errors` parameter.
        Nr   )Úselfr   r   r   © r   úE/var/www/html/env/lib/python3.10/site-packages/redis/asyncio/retry.pyÚ__init__   s   
zRetry.__init__Úspecified_errorsc                 C   s   t t| jt |ƒ ƒƒ| _dS )zM
        Updates the supported errors with the specified error types
        N)ÚtupleÚsetr   )r   r   r   r   r   Úupdate_supported_errors&   s   
ÿzRetry.update_supported_errorsÚdoÚfailÚreturnc              
   Ã   sš   �| j  ¡  d}	 z|ƒ I dH W S  | jyK } z.|d7 }||ƒI dH  | jdkr0|| jkr0|‚| j  |¡}|dkrAt|ƒI dH  W Y d}~nd}~ww q	)a&  
        Execute an operation that might fail and returns its result, or
        raise the exception that was thrown depending on the `Backoff` object.
        `do`: the operation to call. Expects no argument.
        `fail`: the failure handler, expects the last error that was thrown
        r   TNé   )r   Úresetr   r   Úcomputer   )r   r   r    ÚfailuresÚerrorr   r   r   r   Úcall_with_retry.   s"   €
	€ùýzRetry.call_with_retryN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__r
   r   Úintr   r   r   r   Úlistr   r   r   r   r   r'   r   r   r   r   r      s*    þüþý
üÿÿþr   N)Úasyncior   Útypingr   r   r   r   r   r   r	   Úredis.exceptionsr
   r   r   Úredis.backoffr   r   r   r   r   r   r   Ú<module>   s    $