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                	   @   s   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fddZdedd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   s/var/www/vedio/testing/chatpythonscript.ninositsolution.com/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returnc                 C   s   | j S )z,
        Get the number of retries.
        r   )r   r   r   r   get_retries.   s   zRetry.get_retriesvalueNc                 C   s
   || _ dS )z,
        Set the number of retries.
        Nr    )r   r"   r   r   r   update_retries4   s   
zRetry.update_retriesdofailc              
      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_retry)__name__
__module____qualname____doc__	__slots__r
   r   intr   r   r   r   listr   r!   r#   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    $