o
    i                     @   s   d dl mZ d dlZd dlZd dlmZ d dlmZ 					ddee	 e
ee	 d	f B d
edB dedededejdB deegef fddZdS )    )wrapsN)Any)Callable         exc.exc_msgtriesdelaybackoffloggerreturnc                    s$   dt dtf fdd}|S )a  Retry calling the decorated function using an exponential backoff.

    https://www.saltycrane.com/blog/2009/11/trying-out-retry-decorator-python/
    original from: https://wiki.python.org/moin/PythonDecoratorLibrary#Retry

    Parameters
    ----------
    exc : Exception or Tuple[Exception, ...]
        The exception to check. may be a tuple of exceptions to check.
    exc_msg : str, optional
        The message to be shown if an exception occurs.
    tries : int, optional
        The number of times to try (not retry) before giving up, default ``4``.
    delay : int, optional
        The initial delay between retries in seconds, default ``3``.
    backoff : int, optional
        The backoff multiplier e.g. value of 2 will double the delay each
        retry, default ``2``.
    logger : logging.Logger, optional
        The logger to use. If ``None`` (default), print to stdout.
    fr   c              	      s2   t  dtdtdtf fdd}|S )Nargskwargsr   c               
      s   }}|dkrRz| i |W S  yM } z0| d| d}r*|d 7 }r2 | nt| t| |d8 }| 9 }W Y d }~nd }~ww |dks	| i |S )N   z: retrying in z seconds...z  )warningprinttimesleep)r   r   mtriesmdelayemsg)r   r   r   r	   r   r   r
    H/mnt/sdb/aimis/docanh/lib/python3.10/site-packages/pydicom/data/retry.pyf_retry'   s$   

z*retry.<locals>.deco_retry.<locals>.f_retry)r   r   )r   r   r   r   r   r	   r   r
   )r   r   
deco_retry&   s   (zretry.<locals>.deco_retry)r   r   )r   r	   r
   r   r   r   r   r   r   r   retry   s    r    )Nr   r   r   N)	functoolsr   loggingr   typingr   collections.abcr   type	ExceptiontuplestrintLoggerr    r   r   r   r   <module>   s2    