
    Pf                         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          ZdS )	    )sleep)TYPE_CHECKINGAny	AwaitableCallableTupleTypeTypeVar)ConnectionError
RedisErrorTimeoutError)AbstractBackoffTc            	           e Zd ZdZdZeeffdddedee	e
         df         fdZd	efd
Zdeg ee         f         dee
gef         defdZdS )Retryz0Retry a specific number of times after a failure_backoff_retries_supported_errorsbackoffr   retriessupported_errors.c                 0    || _         || _        || _        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   s       E/var/www/html/env/lib/python3.11/site-packages/redis/asyncio/retry.py__init__zRetry.__init__   s        !1    specified_errorsc                 r    t          t          | j        t          |          z                       | _        dS )zM
        Updates the supported errors with the specified error types
        N)tuplesetr   )r   r   s     r   update_supported_errorszRetry.update_supported_errors&   s8     "'&/?)@)@@AA"
 "
r   dofailreturnc                 V  K   | j                                          d}	 	  |             d{V S # | j        $ rm}|dz  } ||           d{V  | j        dk    r|| j        k    r|| j                             |          }|dk    rt          |           d{V  Y d}~nd}~ww xY w)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   s         r   call_with_retryzRetry.call_with_retry.   s       	
	)	)RTTzzzzzz!) ) ) )Ad5kk!!!!!!!=A%%(T]*B*BK-//99Q;;..((((((()
	)s   0 
B'A#B""B'N)__name__
__module____qualname____doc__	__slots__r   r   intr   r	   r   r   listr"   r   r   r   r   r,    r   r   r   r      s        ::;I :
	2 2"2 2  Z 0# 56	2 2 2 2(
 
 
 
 
)2y|+,)4<j\3=N4O)	
) ) ) ) ) )r   r   N)asyncior   typingr   r   r   r   r   r	   r
   redis.exceptionsr   r   r   redis.backoffr   r   r   r4   r   r   <module>r9      s          P P P P P P P P P P P P P P P P P P F F F F F F F F F F .------ GCLL6) 6) 6) 6) 6) 6) 6) 6) 6) 6)r   