
    Pf                         d dl Z 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  e
d          Zerd dlmZ  G d d          ZdS )	    N)sleep)TYPE_CHECKINGAnyCallableIterableTupleTypeTypeVar)ConnectionErrorTimeoutErrorT)AbstractBackoffc            	           e Zd ZdZeeej        ffdddede	e
e         df         fdZdee
e                  d	d
fdZdeg ef         deegef         d	efdZd
S )Retryz0Retry a specific number of times after a failure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.
        N)_backoff_retries_supported_errors)selfr   r   r   s       =/var/www/html/env/lib/python3.11/site-packages/redis/retry.py__init__zRetry.__init__   s     "  !1    specified_errorsreturnNc                 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failc                 .   | j                                          d}	 	  |            S # | j        $ ra}|dz  } ||           | j        dk    r|| j        k    r|| j                             |          }|dk    rt          |           Y d}~nd}~ww xY wz)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   T   N)r   resetr   r   computer   )r   r"   r#   failureserrorr   s         r   call_with_retryzRetry.call_with_retry/   s     	
	#	#rtt) # # #AU=A%%(T]*B*BK-//99Q;;'NNN#
	#s   	( 
BABB)__name__
__module____qualname____doc__r   r   sockettimeoutintr   r	   	Exceptionr   r   r!   r   r   r   r*    r   r   r   r      s        :: N9
	2 2"2 2  Y 45	2 2 2 2*
 (i 9
	
 
 
 
#RUO# 	{C'(# 
	# # # # # #r   r   )r/   timer   typingr   r   r   r   r   r	   r
   redis.exceptionsr   r   r   redis.backoffr   r   r3   r   r   <module>r8      s           O O O O O O O O O O O O O O O O O O : : : : : : : :GCLL .------9# 9# 9# 9# 9# 9# 9# 9# 9# 9#r   