
    ۾hV                         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rd dlmZ  G d d      Zy)	    N)sleep)TYPE_CHECKINGAnyCallableIterableTupleTypeTypeVar)ConnectionErrorTimeoutErrorT)AbstractBackoffc            	           e Zd ZdZeeej                  ffdddede	e
e   df   fdZded	efd
Zd	efdZdee
e      d	dfdZd	efdZded	dfdZdeg ef   deegef   d	efdZy)Retryz0Retry a specific number of times after a failurebackoffr   retriessupported_errors.c                 .    || _         || _        || _        y)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   s       G/var/www/Befach/backend/env/lib/python3.12/site-packages/redis/retry.py__init__zRetry.__init__   s    "  !1    otherreturnc                     t        |t              st        S | j                  |j                  k(  xrF | j                  |j                  k(  xr+ t        | j                        t        |j                        k(  S N)
isinstancer   NotImplementedr   r   setr   )r   r   s     r   __eq__zRetry.__eq__%   sc    %'!! MMU^^+ L/LD**+s53J3J/KK	
r   c                 l    t        | j                  | j                  t        | j                        f      S r   )hashr   r   	frozensetr   r   s    r   __hash__zRetry.__hash__/   s'    T]]DMM9T=S=S3TUVVr   specified_errorsNc                 b    t        t        | j                  t        |      z               | _        y)zM
        Updates the supported errors with the specified error types
        N)tupler"   r   )r   r)   s     r   update_supported_errorszRetry.update_supported_errors2   s*     "'&&/?)@@A"
r   c                     | j                   S )z,
        Get the number of retries.
        r   r'   s    r   get_retrieszRetry.get_retries<   s     }}r   valuec                     || _         y)z,
        Set the number of retries.
        Nr.   )r   r0   s     r   update_retrieszRetry.update_retriesB   s     r   dofailc                 6   | j                   j                          d}	 	  |       S # | j                  $ rb}|dz  } ||       | j                  dk\  r|| j                  kD  r|| j                   j	                  |      }|dkD  rt        |       Y d}~nd}~ww xY w})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   computer   )r   r3   r4   failureserrorr   s         r   call_with_retryzRetry.call_with_retryH   s     		#t)) #AU==A%(T]]*BK--//9Q;'N# s   & BABB)__name__
__module____qualname____doc__r   r   sockettimeoutintr   r	   	Exceptionr   r   boolr#   r(   r   r,   r/   r2   r   r   r;    r   r   r   r      s    : NN9
	2"2 2  Y 45	2*
C 
D 
W# W
 (i 9
	
S C D #RUO# 	{C'(# 
	#r   r   )r@   timer   typingr   r   r   r   r   r	   r
   redis.exceptionsr   r   r   redis.backoffr   r   rE   r   r   <module>rJ      s2      O O O :CL-R# R#r   