o
    zqf  ã                   @   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   úJ/root/parts/websockify/install/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    