File: //home/arjun/projects/env/lib64/python3.10/site-packages/redis/__pycache__/retry.cpython-310.pyc
o
$we � @ s6 d dl Z d dlmZ d dlmZmZ G dd� d�ZdS )� N)�sleep)�ConnectionError�TimeoutErrorc @ s: e Zd ZdZeeejffdd�Zde fdd�Z
dd� Zd S )
�Retryz0Retry a specific number of times after a failurec C s || _ || _|| _dS )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
�D/home/arjun/projects/env/lib/python3.10/site-packages/redis/retry.py�__init__
s
zRetry.__init__�specified_errorsc C s t t| jt |� ��| _dS )zM
Updates the supported errors with the specified error types
N)�tuple�setr )r r r
r
r �update_supported_errors s
�zRetry.update_supported_errorsc
C s� | j �� d} z|� W S | jyA } z(|d7 }||� | jdkr)|| jkr)|�| j �|�}|dkr7t|� W Y d}~nd}~ww 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
���zRetry.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