a
    mJh6#                     @  s   d dl mZ d dlZd dlZd dl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d
d
d	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 )    )annotationsN)Any	AwaitableCallableIterable)warn)ClientResponsec                	   @  sB   e Zd Zddddddd	d
dddZejdddddddZdS )RetryOptionsBase   NTintIterable[int] | None Iterable[type[Exception]] | NoneIterable[str] | Nonebool#EvaluateResponseCallbackType | NoneNone)attemptsstatuses
exceptionsmethodsretry_all_server_errorsevaluate_response_callbackreturnc                 C  s^   || _ |d u rt }|| _|d u r(t }|| _|d u r>h d}dd |D | _|| _|| _d S )N>	   TRACEOPTIONSPOSTPUTHEADDELETEPATCHZCONNECTGETc                 S  s   h | ]}|  qS  )upper).0methodr!   r!   M/var/www/shaz/venv/lib/python3.9/site-packages/aiohttp_retry/retry_options.py	<setcomp>#       z,RetryOptionsBase.__init__.<locals>.<setcomp>)r   setr   r   r   r   r   )selfr   r   r   r   r   r   r!   r!   r%   __init__   s    
zRetryOptionsBase.__init__ClientResponse | Nonefloatattemptresponser   c                 C  s   t d S N)NotImplementedErrorr)   r.   r/   r!   r!   r%   get_timeout(   s    zRetryOptionsBase.get_timeout)r
   NNNTN)N)__name__
__module____qualname__r*   abcabstractmethodr3   r!   r!   r!   r%   r	      s         r	   c                      sJ   e Zd Zdddddd	d
ddddd
 fddZdddddddZ  ZS )ExponentialRetryr
   皙?      >@       @NTr   r,   set[int] | Noneset[type[Exception]] | Noneset[str] | Noner   r   r   )
r   start_timeoutmax_timeoutfactorr   r   r   r   r   r   c
           
        s.   t  j||||||	d || _|| _|| _d S Nr   r   r   r   r   r   )superr*   _start_timeout_max_timeout_factor)
r)   r   r@   rA   rB   r   r   r   r   r   	__class__r!   r%   r*   .   s    	zExponentialRetry.__init__r+   r-   c                 C  s   | j | j|  }t|| jS )z(Return timeout with exponential backoff.)rF   rH   minrG   r)   r.   r/   timeoutr!   r!   r%   r3   G   s    zExponentialRetry.get_timeout)	r
   r:   r;   r<   NNNTN)Nr4   r5   r6   r*   r3   __classcell__r!   r!   rI   r%   r9   -   s            & r9   r   )argskwargsr   c                  O  s   t ddd t| i |S )Nz0RetryOptions is deprecated, use ExponentialRetry   )
stacklevel)r   r9   )rP   rQ   r!   r!   r%   RetryOptionsQ   s    rT   c                      s^   e Zd Zddddddejddf	dddd	d
d
ddddd
 fddZdddd
dddZ  ZS )RandomRetryr
   Nr:         @Tr   r   r   r   r,   zCallable[[], float]r   r   r   )
r   r   r   r   min_timeoutrA   random_funcr   r   r   c
           
        s4   t  j||||||	d || _|| _|| _|| _d S rC   )rE   r*   r   rW   rA   random)
r)   r   r   r   r   rW   rA   rX   r   r   rI   r!   r%   r*   W   s    	zRandomRetry.__init__r+   r-   c                 C  s   | j |  | j| j    S )zGenerate random timeouts.)rW   rY   rA   r2   r!   r!   r%   r3   q   s    zRandomRetry.get_timeout)N)r4   r5   r6   rY   r*   r3   rO   r!   r!   rI   r%   rU   V   s   & rU   c                	      sD   e Zd Zdddddddd	d
 fddZdddddddZ  ZS )	ListRetryNTzlist[float]r   r   r   r   r   r   )timeoutsr   r   r   r   r   r   c                   s&   t  jt||||||d || _d S rC   )rE   r*   lenr[   )r)   r[   r   r   r   r   r   rI   r!   r%   r*   {   s    	zListRetry.__init__r   r+   r,   r-   c                 C  s
   | j | S )zTimeouts from a defined list.)r[   r2   r!   r!   r%   r3      s    zListRetry.get_timeout)NNNTN)NrN   r!   r!   rI   r%   rZ   z   s          rZ   c                      sH   e Zd Zddddd	d
ddddd	 fddZdddddddZ  ZS )FibonacciRetryr
         ?NrV   Tr   r,   r   r   r   r   r   r   )	r   
multiplierr   r   r   rA   r   r   r   c	           	        s4   t  j||||||d || _|| _d| _d| _d S )NrD   r^   )rE   r*   rA   r_   	prev_stepcurrent_step)	r)   r   r_   r   r   r   rA   r   r   rI   r!   r%   r*      s    	zFibonacciRetry.__init__r+   r-   c                 C  s,   | j | j }| j| _ || _t| j| | jS r0   )r`   ra   rK   r_   rA   )r)   r.   r/   Znew_current_stepr!   r!   r%   r3      s    zFibonacciRetry.get_timeout)r
   r^   NNNrV   TN)NrN   r!   r!   rI   r%   r]      s           $ r]   c                      sT   e Zd ZdZddd	d	d	d
ddd	dddd fddZdddd	d fddZ  ZS )JitterRetryz3https://github.com/inyutin/aiohttp_retry/issues/44.r
   r:   r;   r<   NTr   r,   r=   r>   r?   r   r   r   )r   r@   rA   rB   r   r   r   random_interval_sizer   r   r   c                   s:   t  j||||||||	|
d	 || _|| _|| _|| _d S )N)	r   r@   rA   rB   r   r   r   r   r   )rE   r*   rF   rG   rH   _random_interval_size)r)   r   r@   rA   rB   r   r   r   rc   r   r   rI   r!   r%   r*      s    zJitterRetry.__init__r+   r-   c                   s$   t  |td| j| j  }|S )Nr   )rE   r3   rY   uniformrd   rH   rL   rI   r!   r%   r3      s     zJitterRetry.get_timeout)
r
   r:   r;   r<   NNNr<   TN)N)r4   r5   r6   __doc__r*   r3   rO   r!   r!   rI   r%   rb      s             (! rb   )
__future__r   r7   rY   typingr   r   r   r   warningsr   Zaiohttpr   r   ZEvaluateResponseCallbackTyper	   r9   rT   rU   rZ   r]   rb   r!   r!   r!   r%   <module>   s    $$&