o
    4g6#                     @  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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                   @  s6   e Zd Z						ddddZejddddZdS )RetryOptionsBase   NTattemptsintstatusesIterable[int] | None
exceptions Iterable[type[Exception]] | NonemethodsIterable[str] | Noneretry_all_server_errorsboolevaluate_response_callback#EvaluateResponseCallbackType | NonereturnNonec                 C  s^   || _ |d u r
t }|| _|d u rt }|| _|d u rh d}dd |D | _|| _|| _d S )N>	   GETPUTHEADPOSTPATCHTRACEDELETECONNECTOPTIONSc                 S  s   h | ]}|  qS  )upper).0methodr"   r"   g/var/www/html/Testing_prj/Navya-Bakers/venv/lib/python3.10/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__attemptresponseClientResponse | Nonefloatc                 C  s   t N)NotImplementedErrorr)   r+   r,   r"   r"   r&   get_timeout(   s   zRetryOptionsBase.get_timeout)r
   NNNTN)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r/   r+   r   r,   r-   r   r.   )__name__
__module____qualname__r*   abcabstractmethodr2   r"   r"   r"   r&   r	      s    r	   c                      s@   e Zd Z									d d! fddZ	d"d#ddZ  ZS )$ExponentialRetryr
   皙?      >@       @NTr   r   start_timeoutr.   max_timeoutfactorr   set[int] | Noner   set[type[Exception]] | Noner   set[str] | Noner   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>   r?   r   r   r   r   r   	__class__r"   r&   r*   .   s   	
zExponentialRetry.__init__r+   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&   r2   G   s   zExponentialRetry.get_timeout)	r
   r:   r;   r<   NNNTN)r   r   r=   r.   r>   r.   r?   r.   r   r@   r   rA   r   rB   r   r   r   r   r   r   r/   r3   r4   r5   r6   r*   r2   __classcell__r"   r"   rI   r&   r9   -   s    r9   argsr   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                	      sB   e Zd Zddddddejddf	d  fddZ	d!d"ddZ  ZS )#RandomRetryr
   Nr:         @Tr   r   r   r   r   r   r   r   min_timeoutr.   r>   random_funcCallable[[], float]r   r   r   r   r   r   c
           
        s4   t  j||||||	d || _|| _|| _|| _d S rC   )rE   r*   r   rW   r>   random)
r)   r   r   r   r   rW   r>   rX   r   r   rI   r"   r&   r*   W   s   	
zRandomRetry.__init__r+   r,   r-   c                 C  s   | j |  | j| j    S )zGenerate random timeouts.)rW   rZ   r>   r1   r"   r"   r&   r2   q   s   zRandomRetry.get_timeout)r   r   r   r   r   r   r   r   rW   r.   r>   r.   rX   rY   r   r   r   r   r   r   r/   r3   )r4   r5   r6   rZ   r*   r2   rO   r"   r"   rI   r&   rU   V   s    rU   c                      s8   e Zd Z					dd fddZ	ddddZ  ZS )	ListRetryNTtimeoutslist[float]r   r   r   r   r   r   r   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-   r.   c                 C  s
   | j | S )zTimeouts from a defined list.)r\   r1   r"   r"   r&   r2      s   
zListRetry.get_timeout)NNNTN)r\   r]   r   r   r   r   r   r   r   r   r   r   r   r   r/   r3   rN   r"   r"   rI   r&   r[   z   s    r[   c                      s>   e Zd Z								dd fddZ	d d!ddZ  ZS )"FibonacciRetryr
         ?NrV   Tr   r   
multiplierr.   r   r   r   r   r   r   r>   r   r   r   r   r   r   c	           	        s4   t  j||||||d || _|| _d| _d| _d S )NrD   r`   )rE   r*   r>   ra   	prev_stepcurrent_step)	r)   r   ra   r   r   r   r>   r   r   rI   r"   r&   r*      s   	
zFibonacciRetry.__init__r+   r,   r-   c                 C  s,   | j | j }| j| _ || _t| j| | jS r/   )rb   rc   rK   ra   r>   )r)   r+   r,   new_current_stepr"   r"   r&   r2      s   zFibonacciRetry.get_timeout)r
   r`   NNNrV   TN)r   r   ra   r.   r   r   r   r   r   r   r>   r.   r   r   r   r   r   r   r/   r3   rN   r"   r"   rI   r&   r_      s    r_   c                      sJ   e Zd ZdZ										d"d# fddZ	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   rA   r   rB   random_interval_sizer   r   r   r   r   r   c                   s:   t  j||||||||	|
d	 || _|| _|| _|| _d S )N)	r   r=   r>   r?   r   r   r   r   r   )rE   r*   rF   rG   rH   _random_interval_size)r)   r   r=   r>   r?   r   r   r   rf   r   r   rI   r"   r&   r*      s   
zJitterRetry.__init__r+   r,   r-   c                   s$   t  |td| j| j  }|S )Nr   )rE   r2   rZ   uniformrg   rH   rL   rI   r"   r&   r2      s    zJitterRetry.get_timeout)
r
   r:   r;   r<   NNNr<   TN)r   r   r=   r.   r>   r.   r?   r.   r   r@   r   rA   r   rB   rf   r.   r   r   r   r   r   r   r/   r3   )r4   r5   r6   __doc__r*   r2   rO   r"   r"   rI   r&   re      s    !re   )rP   r   rQ   r   r   r9   )
__future__r   r7   rZ   typingr   r   r   r   warningsr   aiohttpr   r   EvaluateResponseCallbackTyper	   r9   rT   rU   r[   r_   re   r"   r"   r"   r&   <module>   s     
$$&