o
    rPf                     @   s6   d dl Z d dlmZ d dlmZmZ G dd dZdS )    N)sleep)ConnectionErrorTimeoutErrorc                   @   s:   e Zd ZdZeeejffddZde	fddZ
dd Zd	S )
Retryz0Retry a specific number of times after a failurec                 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.
        N)_backoff_retries_supported_errors)selfbackoffretriessupported_errors r   L/var/www/html/humari/django-venv/lib/python3.10/site-packages/redis/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_errorsc              
   C   s   | j   d}	 z| W S  | jyA } z(|d7 }|| | jdkr)|| jkr)|| j |}|dkr7t| 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   T   N)r   resetr   r   computer   )r	   dofailfailureserrorr
   r   r   r   call_with_retry#   s    
zRetry.call_with_retryN)__name__
__module____qualname____doc__r   r   sockettimeoutr   listr   r   r   r   r   r   r      s    

r   )r    timer   redis.exceptionsr   r   r   r   r   r   r   <module>   s    