o
    ¼>hV  ã                   @   sr   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r0d dlmZ G dd„ dƒZdS )	é    N)Úsleep)ÚTYPE_CHECKINGÚAnyÚCallableÚIterableÚTupleÚTypeÚTypeVar)ÚConnectionErrorÚTimeoutErrorÚT)ÚAbstractBackoffc                	   @   sÀ   e Zd ZdZeeejffdddede	e
e df fdd„Zd	ed
efdd„Zd
efdd„Zdee
e  d
dfdd„Zd
efdd„Zded
dfdd„Zdeg ef deegef d
efdd„ZdS )ÚRetryz0Retry a specific number of times after a failureÚbackoffr   ÚretriesÚsupported_errors.c                 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)Úselfr   r   r   © r   úk/var/www/vedio/testing/chatpythonscript.ninositsolution.com/env/lib/python3.10/site-packages/redis/retry.pyÚ__init__   s   
zRetry.__init__ÚotherÚreturnc                 C   s:   t |tƒstS | j|jko| j|jkot| jƒt|jƒkS ©N)Ú
isinstancer   ÚNotImplementedr   r   Úsetr   )r   r   r   r   r   Ú__eq__%   s   

ÿýzRetry.__eq__c                 C   s   t | j| jt| jƒfƒS r   )Úhashr   r   Ú	frozensetr   ©r   r   r   r   Ú__hash__/   s   zRetry.__hash__Úspecified_errorsNc                 C   s   t t| jt |ƒ ƒƒ| _dS )zM
        Updates the supported errors with the specified error types
        N)Útupler   r   )r   r$   r   r   r   Úupdate_supported_errors2   s   
ÿzRetry.update_supported_errorsc                 C   s   | j S )z,
        Get the number of retries.
        ©r   r"   r   r   r   Úget_retries<   s   zRetry.get_retriesÚvaluec                 C   s
   || _ dS )z,
        Set the number of retries.
        Nr'   )r   r)   r   r   r   Úupdate_retriesB   s   
zRetry.update_retriesÚdoÚfailc              
   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   r+   r,   ÚfailuresÚerrorr   r   r   r   Úcall_with_retryH   s    
€ùýzRetry.call_with_retry)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r
   r   ÚsocketÚtimeoutÚintr   r   Ú	Exceptionr   r   Úboolr   r#   r   r&   r(   r*   r   r   r2   r   r   r   r   r      s:    ýüþý
ü

ÿ
þ

þýür   )r7   Útimer   Útypingr   r   r   r   r   r   r	   Úredis.exceptionsr
   r   r   Úredis.backoffr   r   r   r   r   r   Ú<module>   s    $