
    +h                     <    d dl Z d dlmZ d dlmZmZ  G d d      Zy)    N)sleep)ConnectionErrorTimeoutErrorc                   F    e Zd ZdZeeej                  ffdZde	fdZ
d Zy)Retryz0Retry a specific number of times after a failurec                 .    || _         || _        || _        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)selfbackoffretriessupported_errorss       >/var/www/html/venv/lib/python3.12/site-packages/redis/retry.py__init__zRetry.__init__
   s      !1    specified_errorsc                 b    t        t        | j                  t        |      z               | _        y)zM
        Updates the supported errors with the specified error types
        N)tuplesetr   )r   r   s     r   update_supported_errorszRetry.update_supported_errors   s*     "'&&/?)@@A"
r   c                 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   dofailfailureserrorr   s         r   call_with_retryzRetry.call_with_retry#   s     		#t)) #AU==A%(T]]*BK--//9Q;'N# s   & BABBN)__name__
__module____qualname____doc__r   r   sockettimeoutr   listr   r     r   r   r   r      s+    : *<H	2"
 
#r   r   )r%   timer   redis.exceptionsr   r   r   r(   r   r   <module>r+      s      :/# /#r   