a
    !f                     @   s   d dl Z d dlZd dlmZmZmZmZmZmZm	Z	m
Z
 d dlmZ d dlmZ eegee f ZG dd dZG dd deZeeed	d
dZG dd deZG dd deZG dd deZG dd deZdS )    N)Any	AwaitableCallableIterableListOptionalSetType)warn)ClientResponsec                   @   sZ   e Zd Zd
eeee  eeee   eee	 dddZ
ejdeee eddd	ZdS )RetryOptionsBase   NTattemptsstatuses
exceptionsretry_all_server_errorsevaluate_response_callbackc                 C   s>   || _ |d u rt }|| _|d u r(t }|| _|| _|| _d S N)r   setr   r   r   r   )selfr   r   r   r   r    r   \/var/www/html/python-backend/venv/lib/python3.9/site-packages/aiohttp_retry/retry_options.py__init__   s    	zRetryOptionsBase.__init__attemptresponsereturnc                 C   s   t d S r   )NotImplementedErrorr   r   r   r   r   r   get_timeout!   s    zRetryOptionsBase.get_timeout)r   NNTN)N)__name__
__module____qualname__intr   r   r	   	ExceptionboolEvaluateResponseCallbackTyper   abcabstractmethodr   floatr    r   r   r   r   r      s        
r   c                
       sb   e Zd Zdeeeeeee  eeee   e	ee
 d fdd	Zdeee ed
ddZ  ZS )ExponentialRetryr   皙?      >@       @NTr   start_timeoutmax_timeoutfactorr   r   r   r   c	           	         s,   t  j|||||d || _|| _|| _d S Nr   )superr   _start_timeout_max_timeout_factor)	r   r   r0   r1   r2   r   r   r   r   	__class__r   r   r   '   s    zExponentialRetry.__init__r   c                 C   s   | j | j|  }t|| jS )z(Return timeout with exponential backoff.)r5   r7   minr6   r   r   r   timeoutr   r   r   r    >   s    zExponentialRetry.get_timeout)r   r,   r-   r.   NNTN)N)r!   r"   r#   r$   r*   r   r   r	   r%   r&   r'   r   r   r    __classcell__r   r   r8   r   r+   &   s&           
r+   )argskwargsr   c                  O   s   t d t| i |S )Nz0RetryOptions is deprecated, use ExponentialRetry)r
   r+   )r>   r?   r   r   r   RetryOptionsD   s    r@   c                
       s|   e Zd Zdddddejddfeeee  eeee   e	e	e
g e	f eee d fddZdeee e	d	d
dZ  ZS )RandomRetryr   Nr,         @T)r   r   r   min_timeoutr1   random_funcr   r   c	           	         s2   t  j|||||d || _|| _|| _|| _d S r3   )r4   r   r   rC   r1   random)	r   r   r   r   rC   r1   rD   r   r   r8   r   r   r   J   s    zRandomRetry.__init__r   c                 C   s   | j |  | j| j    S )zGenerate random timeouts.)rC   rE   r1   r   r   r   r   r    b   s    zRandomRetry.get_timeout)N)r!   r"   r#   rE   r$   r   r   r	   r%   r*   r   r&   r'   r   r   r    r=   r   r   r8   r   rA   I   s&   

rA   c                       s`   e Zd Zd	ee eee  eeee	   e
ee d fddZd
eee edddZ  ZS )	ListRetryNT)timeoutsr   r   r   r   c                    s$   t  jt|||||d || _d S r3   )r4   r   lenrG   )r   rG   r   r   r   r   r8   r   r   r   h   s    zListRetry.__init__r   c                 C   s
   | j | S )ztimeouts from a defined list.)rG   r   r   r   r   r    y   s    zListRetry.get_timeout)NNTN)N)r!   r"   r#   r   r*   r   r   r$   r	   r%   r&   r'   r   r   r    r=   r   r   r8   r   rF   g   s       
rF   c                	       s`   e Zd Zdeeeee  eeee   ee	ee
 d fddZdeee ed	d
dZ  ZS )FibonacciRetryr         ?NrB   T)r   
multiplierr   r   r1   r   r   c                    s2   t  j|||||d || _|| _d| _d| _d S )Nr   rJ   )r4   r   r1   rK   	prev_stepcurrent_step)r   r   rK   r   r   r1   r   r   r8   r   r   r      s    
zFibonacciRetry.__init__r   c                 C   s,   | j | j }| j| _ || _t| j| | jS r   )rL   rM   r:   rK   r1   )r   r   r   Znew_current_stepr   r   r   r       s    zFibonacciRetry.get_timeout)r   rJ   NNrB   TN)N)r!   r"   r#   r$   r*   r   r   r	   r%   r&   r'   r   r   r    r=   r   r   r8   r   rI   ~   s"          
rI   c                       sl   e Zd ZdZdeeeeeee  eeee	   ee
ee d	 fd	d
Zdeee ed fddZ  ZS )JitterRetryz2https://github.com/inyutin/aiohttp_retry/issues/44r   r,   r-   r.   NT)	r   r0   r1   r2   r   r   random_interval_sizer   r   c
           
   
      s8   t  j||||||||	d || _|| _|| _|| _d S )Nr/   )r4   r   r5   r6   r7   _random_interval_size)
r   r   r0   r1   r2   r   r   rO   r   r   r8   r   r   r      s    zJitterRetry.__init__r   c                    s$   t  |td| j| j  }|S )Nr   )r4   r    rE   uniformrP   r7   r;   r8   r   r   r       s     zJitterRetry.get_timeout)	r   r,   r-   r.   NNr.   TN)N)r!   r"   r#   __doc__r$   r*   r   r   r	   r%   r&   r'   r   r   r    r=   r   r   r8   r   rN      s,            
rN   )r(   rE   typingr   r   r   r   r   r   r   r	   warningsr
   Zaiohttpr   r&   r'   r   r+   r@   rA   rF   rI   rN   r   r   r   r   <module>   s   ( 