U
    ^g%i6#                     @  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  sl   || _ |d krt }|| _|d kr(t }|| _|d krLddddddddd	h	}d
d |D | _|| _|| _d S )NHEADGETPUTDELETEOPTIONSTRACEPOSTZCONNECTPATCHc                 S  s   h | ]}|  qS  )upper).0methodr!   r!   Z/var/www/html/api-medvista/venv/lib/python3.8/site-packages/aiohttp_retry/retry_options.py	<setcomp>#   s     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abstractmethodr2   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?   r@   rA   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.)rE   rG   minrF   r(   r-   r.   timeoutr!   r!   r%   r2   G   s    zExponentialRetry.get_timeout)	r
   r9   r:   r;   NNNTN)Nr3   r4   r5   r)   r2   __classcell__r!   r!   rH   r%   r8   -   s            & r8   r   )argskwargsr   c                  O  s   t ddd t| |S )Nz0RetryOptions is deprecated, use ExponentialRetry   )
stacklevel)r   r8   )rO   rP   r!   r!   r%   RetryOptionsQ   s    rS   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
   Nr9         @Tr   r   r   r   r+   zCallable[[], float]r   r   r   )
r   r   r   r   min_timeoutr@   random_funcr   r   r   c
           
        s4   t  j||||||	d || _|| _|| _|| _d S rB   )rD   r)   r   rV   r@   random)
r(   r   r   r   r   rV   r@   rW   r   r   rH   r!   r%   r)   W   s    	zRandomRetry.__init__r*   r,   c                 C  s   | j |  | j| j    S )zGenerate random timeouts.)rV   rX   r@   r1   r!   r!   r%   r2   q   s    zRandomRetry.get_timeout)N)r3   r4   r5   rX   r)   r2   rN   r!   r!   rH   r%   rT   V   s   & rT   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 rB   )rD   r)   lenrZ   )r(   rZ   r   r   r   r   r   rH   r!   r%   r)   {   s    	zListRetry.__init__r   r*   r+   r,   c                 C  s
   | j | S )zTimeouts from a defined list.)rZ   r1   r!   r!   r%   r2      s    zListRetry.get_timeout)NNNTN)NrM   r!   r!   rH   r%   rY   z   s          rY   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
         ?NrU   Tr   r+   r   r   r   r   r   r   )	r   
multiplierr   r   r   r@   r   r   r   c	           	        s4   t  j||||||d || _|| _d| _d| _d S )NrC   r]   )rD   r)   r@   r^   	prev_stepcurrent_step)	r(   r   r^   r   r   r   r@   r   r   rH   r!   r%   r)      s    	zFibonacciRetry.__init__r*   r,   c                 C  s,   | j | j }| j| _ || _t| j| | jS r/   )r_   r`   rJ   r^   r@   )r(   r-   r.   Znew_current_stepr!   r!   r%   r2      s    zFibonacciRetry.get_timeout)r
   r]   NNNrU   TN)NrM   r!   r!   rH   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
   r9   r:   r;   NTr   r+   r<   r=   r>   r   r   r   )r   r?   r@   rA   r   r   r   random_interval_sizer   r   r   c                   s:   t  j||||||||	|
d	 || _|| _|| _|| _d S )N)	r   r?   r@   rA   r   r   r   r   r   )rD   r)   rE   rF   rG   _random_interval_size)r(   r   r?   r@   rA   r   r   r   rb   r   r   rH   r!   r%   r)      s    zJitterRetry.__init__r*   r,   c                   s$   t  |td| j| j  }|S )Nr   )rD   r2   rX   uniformrc   rG   rK   rH   r!   r%   r2      s     zJitterRetry.get_timeout)
r
   r9   r:   r;   NNNr;   TN)N)r3   r4   r5   __doc__r)   r2   rN   r!   r!   rH   r%   ra      s             (! ra   )
__future__r   r6   rX   typingr   r   r   r   warningsr   Zaiohttpr   r   ZEvaluateResponseCallbackTyper	   r8   rS   rT   rY   r\   ra   r!   r!   r!   r%   <module>   s    $$&