File: //usr/lib/python3.9/site-packages/redis/asyncio/__pycache__/retry.cpython-39.pyc
a
��b� � @ sn d dl mZ d dlmZmZmZmZmZmZm Z d dl
mZmZm
Z
erTd dlmZ e d�ZG dd� d�ZdS ) � )�sleep)�
TYPE_CHECKING�Any� Awaitable�Callable�Tuple�Type�TypeVar)�ConnectionError�
RedisError�TimeoutError)�AbstractBackoff�Tc @ sb e Zd ZdZdZeeffdeee e
df d�dd�Zeg e
e f ee
gef ed�d d
�ZdS )�Retryz0Retry a specific number of times after a failure��_backoff�_retries�_supported_errorsr
.)�backoff�retries�supported_errorsc 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.
Nr )�selfr r r � r �7/usr/lib/python3.9/site-packages/redis/asyncio/retry.py�__init__ s zRetry.__init__)�do�fail�returnc
� s� | j �� d}z|� I dH W S | jy� } z\|d7 }||�I dH | jdkr\|| jkr\|�| j �|�}|dkr~t|�I dH W Y d}~qd}~0 0 qdS )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 N� )r �resetr r Zcomputer )r r r Zfailures�errorr r r r �call_with_retry&