
    tni6#                    "   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          Z G d d	e          ZddZ G d de          Z G d de          Z G d de          Z G d de          ZdS )    )annotationsN)Any	AwaitableCallableIterable)warn)ClientResponsec                  H    e Zd Z	 	 	 	 	 	 dddZej        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                    || _         |t                      }|| _        |t                      }|| _        |h d}d |D             | _        || _        || _        d S )N>	   GETPUTHEADPOSTPATCHTRACEDELETECONNECTOPTIONSc                6    h | ]}|                                 S  )upper).0methods     X/var/www/html/gpu-tools/venv/lib/python3.11/site-packages/aiohttp_retry/retry_options.py	<setcomp>z,RetryOptionsBase.__init__.<locals>.<setcomp>#   s     &L&L&L&v||~~&L&L&L    )r   setr   r   r   r   r   )selfr   r   r   r   r   r   s          r*   __init__zRetryOptionsBase.__init__   sr     &uuH'/J5??fffG&L&LG&L&L&L'>$*D'''r,   attemptresponseClientResponse | Nonefloatc                    t           N)NotImplementedErrorr.   r0   r1   s      r*   get_timeoutzRetryOptionsBase.get_timeout(   s    !!r,   )r   NNNTN)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r5   r0   r   r1   r2   r   r3   )__name__
__module____qualname__r/   abcabstractmethodr8   r&   r,   r*   r   r      so         )-7;(,(,JNE E E E E4 	" " " " " " "r,   r   c                  @     e Zd Z	 	 	 	 	 	 	 	 	 dd fdZ	 d d!dZ xZS )"ExponentialRetryr   皙?      >@       @NTr   r   start_timeoutr3   max_timeoutfactorr   set[int] | Noner   set[type[Exception]] | Noner   set[str] | Noner   r   r   r   r   r   c
                    t                                          ||||||	           || _        || _        || _        d S Nr   r   r   r   r   r   )superr/   _start_timeout_max_timeout_factor)r.   r   rD   rE   rF   r   r   r   r   r   	__class__s             r*   r/   zExponentialRetry.__init__.   sU     	!$;'A 	 	
 	
 	
 &3#.$r,   r0   r1   r2   c                P    | j         | j        |z  z  }t          || j                  S )z(Return timeout with exponential backoff.)rN   rP   minrO   )r.   r0   r1   timeouts       r*   r8   zExponentialRetry.get_timeoutG   s+     %w)>?7D-...r,   )	r   rA   rB   rC   NNNTN)r   r   rD   r3   rE   r3   rF   r3   r   rG   r   rH   r   rI   r   r   r   r   r   r   r5   r9   r:   r;   r<   r/   r8   __classcell__rQ   s   @r*   r@   r@   -   s}         "!$(26#'(,JN% % % % % % %8 +// / / / / / / / /r,   r@   argsr   kwargsr   c                 <    t          dd           t          | i |S )Nz0RetryOptions is deprecated, use ExponentialRetry   )
stacklevel)r   r@   )rX   rY   s     r*   RetryOptionsr]   Q   s)    	;JJJJT,V,,,r,   c            	      J     e Zd Zddddddej        ddf	d fdZ	 dd dZ xZS )!RandomRetryr   NrA         @Tr   r   r   r   r   r   r   r   min_timeoutr3   rE   random_funcCallable[[], float]r   r   r   r   r   r   c
                    t                                          ||||||	           || _        || _        || _        || _        d S rK   )rM   r/   r   ra   rE   random)r.   r   r   r   r   ra   rE   rb   r   r   rQ   s             r*   r/   zRandomRetry.__init__W   s\     	!$;'A 	 	
 	
 	
 &"-"-!r,   r0   r1   r2   c                Z    | j         |                                 | j        | j         z
  z  z   S )zGenerate random timeouts.)ra   re   rE   r7   s      r*   r8   zRandomRetry.get_timeoutq   s*     $++--43CdFV3V"WWWr,   )r   r   r   r   r   r   r   r   ra   r3   rE   r3   rb   rc   r   r   r   r   r   r   r5   r9   )r:   r;   r<   re   r/   r8   rV   rW   s   @r*   r_   r_   V   s         )-7;(,  +1=(,JN" " " " " " ": +/X X X X X X X X Xr,   r_   c                  8     e Zd Z	 	 	 	 	 dd fdZ	 dddZ xZS )	ListRetryNTtimeoutslist[float]r   r   r   r   r   r   r   r   r   r   r   r   c                ~    t                                          t          |          |||||           || _        d S rK   )rM   r/   lenri   )r.   ri   r   r   r   r   r   rQ   s          r*   r/   zListRetry.__init__{   sK     	]]!$;'A 	 	
 	
 	
 !r,   r0   r   r1   r2   r3   c                    | j         |         S )zTimeouts from a defined list.)ri   r7   s      r*   r8   zListRetry.get_timeout   s     }W%%r,   )NNNTN)ri   rj   r   r   r   r   r   r   r   r   r   r   r   r   r5   r9   rU   rW   s   @r*   rh   rh   z   sq         *.7;(,(,JN! ! ! ! ! ! !, +/& & & & & & & & &r,   rh   c                  >     e Zd Z	 	 	 	 	 	 	 	 dd fdZ	 dddZ xZS ) FibonacciRetryr         ?Nr`   Tr   r   
multiplierr3   r   r   r   r   r   r   rE   r   r   r   r   r   r   c	                    t                                          ||||||           || _        || _        d| _        d| _        d S )NrL   rp   )rM   r/   rE   rq   	prev_stepcurrent_step)
r.   r   rq   r   r   r   rE   r   r   rQ   s
            r*   r/   zFibonacciRetry.__init__   s^     	!$;'A 	 	
 	
 	
 '$r,   r0   r1   r2   c                    | j         | j        z   }| j        | _         || _        t          | j        |z  | j                  S r5   )rs   rt   rS   rq   rE   )r.   r0   r1   new_current_steps       r*   r8   zFibonacciRetry.get_timeout   sA    
  >D,==*,4?%55t7GHHHr,   )r   rp   NNNr`   TN)r   r   rq   r3   r   r   r   r   r   r   rE   r3   r   r   r   r   r   r   r5   r9   rU   rW   s   @r*   ro   ro      s         )-7;(, (,JN             8 +/	I 	I 	I 	I 	I 	I 	I 	I 	Ir,   ro   c                  J     e Zd ZdZ	 	 	 	 	 	 	 	 	 	 d d! fdZ	 d"d# fdZ xZS )$JitterRetryz3https://github.com/inyutin/aiohttp_retry/issues/44.r   rA   rB   rC   NTr   r   rD   r3   rE   rF   r   rG   r   rH   r   rI   random_interval_sizer   r   r   r   r   r   c                    t                                          ||||||||	|
	  	         || _        || _        || _        || _        d S )N)	r   rD   rE   rF   r   r   r   r   r   )rM   r/   rN   rO   rP   _random_interval_size)r.   r   rD   rE   rF   r   r   r   ry   r   r   rQ   s              r*   r/   zJitterRetry.__init__   sh     	'#!$;'A 	 
	
 
	
 
	
 &3#.$%9"""r,   r0   r1   r2   c                    t                                          |          t          j        d| j                  | j        z  z   }|S )Nr   )rM   r8   re   uniformr{   rP   )r.   r0   r1   rT   rQ   s       r*   r8   zJitterRetry.get_timeout   s>    
 ,,W55q$Jd8e8eimiu8uur,   )
r   rA   rB   rC   NNNrC   TN)r   r   rD   r3   rE   r3   rF   r3   r   rG   r   rH   r   rI   ry   r3   r   r   r   r   r   r   r5   r9   )r:   r;   r<   __doc__r/   r8   rV   rW   s   @r*   rx   rx      s        == "!$(26#'&)(,JN: : : : : : :B +/          r,   rx   )rX   r   rY   r   r   r@   )
__future__r   r=   re   typingr   r   r   r   warningsr   aiohttpr	   r   EvaluateResponseCallbackTyper   r@   r]   r_   rh   ro   rx   r&   r,   r*   <module>r      s   " " " " " " 



  5 5 5 5 5 5 5 5 5 5 5 5       " " " " " "'(8)D/(IJ " " " " " " " "@!/ !/ !/ !/ !/' !/ !/ !/H- - - -
!X !X !X !X !X" !X !X !XH& & & & &  & & &:#I #I #I #I #I% #I #I #IL' ' ' ' '" ' ' ' ' 'r,   