
    XDi                     j   S SK r S SKrS SKJr  \R                  (       a
  S SKrS SKJr   " S S\ R                  5      r\R                  \\R                  S/\4   4   r " S S\5      r " S	 S
\5      r " S S\5      r\" 5       r " S S\5      r " S S\5      r " S S\5      r " S S\5      rg)    N)_utils)RetryCallStatec                   \    \ rS rSrSr\R                  SSS\4S j5       rSS jr	SS jr
S	rg
)	stop_base   z(Abstract base class for stop strategies.retry_stater   returnc                     g N selfr   s     U/var/www/html/Aiprofessor/professorTrac/lib/python3.13/site-packages/tenacity/stop.py__call__stop_base.__call__   s        c                     [        X5      $ r   )stop_allr   others     r   __and__stop_base.__and__"       $$r   c                     [        X5      $ r   )stop_anyr   s     r   __or__stop_base.__or__%   r   r   r   N)r   r   r	   r   )r   r   r	   r   )__name__
__module____qualname____firstlineno____doc__abcabstractmethodboolr   r   r   __static_attributes__r   r   r   r   r      s6    2$4   %%r   r   r   c                   <    \ rS rSrSrS\SS4S jrSSS\4S	 jrS
r	g)r   ,   z+Stop if any of the stop condition is valid.stopsr	   Nc                     Xl         g r   r)   r   r)   s     r   __init__stop_any.__init__/       
r   r   r   c                 B   ^ [        U4S jU R                   5       5      $ )Nc              3   2   >#    U  H  o" T5      v   M     g 7fr   r   .0xr   s     r   	<genexpr>$stop_any.__call__.<locals>.<genexpr>3        6:a1[>>:   )anyr)   r   s    `r   r   stop_any.__call__2       64::666r   r+   
r   r   r    r!   r"   r   r-   r%   r   r&   r   r   r   r   r   ,   s,    5y T 7$4 7 7r   r   c                   <    \ rS rSrSrS\SS4S jrSSS\4S	 jrS
r	g)r   6   z*Stop if all the stop conditions are valid.r)   r	   Nc                     Xl         g r   r+   r,   s     r   r-   stop_all.__init__9   r/   r   r   r   c                 B   ^ [        U4S jU R                   5       5      $ )Nc              3   2   >#    U  H  o" T5      v   M     g 7fr   r   r2   s     r   r5   $stop_all.__call__.<locals>.<genexpr>=   r7   r8   )allr)   r   s    `r   r   stop_all.__call__<   r;   r   r+   r<   r   r   r   r   r   6   s,    4y T 7$4 7 7r   r   c                   *    \ rS rSrSrSSS\4S jrSrg)	_stop_never@   zNever stop.r   r   r	   c                     g)NFr   r   s     r   r   _stop_never.__call__C   s    r   r   N)r   r   r    r!   r"   r%   r   r&   r   r   r   rG   rG   @   s    $4  r   rG   c                   4    \ rS rSrSrS
S jrSSS\4S jrS	rg)stop_when_event_setJ   z!Stop when the given event is set.r	   Nc                     Xl         g r   event)r   rP   s     r   r-   stop_when_event_set.__init__M   r/   r   r   r   c                 6    U R                   R                  5       $ r   )rP   is_setr   s     r   r   stop_when_event_set.__call__P   s    zz  ""r   rO   )rP   zthreading.Eventr	   N)	r   r   r    r!   r"   r-   r%   r   r&   r   r   r   rL   rL   J   s    +#$4 # #r   rL   c                   <    \ rS rSrSrS\SS4S jrSSS\4S	 jrS
r	g)stop_after_attemptT   z.Stop when the previous attempt >= max_attempt.max_attempt_numberr	   Nc                     Xl         g r   rX   )r   rX   s     r   r-   stop_after_attempt.__init__W   s    "4r   r   r   c                 4    UR                   U R                  :  $ r   )attempt_numberrX   r   s     r   r   stop_after_attempt.__call__Z   s    ))T-D-DDDr   rZ   )
r   r   r    r!   r"   intr-   r%   r   r&   r   r   r   rV   rV   T   s/    853 54 5E$4 E Er   rV   c                   P    \ rS rSrSrS\R                  SS4S jrSSS\4S	 jr	S
r
g)stop_after_delay^   a?  
Stop when the time from the first attempt >= limit.

Note: `max_delay` will be exceeded, so when used with a `wait`, the actual total delay will be greater
than `max_delay` by some of the final sleep period before `max_delay` is exceeded.

If you need stricter timing with waits, consider `stop_before_delay` instead.
	max_delayr	   Nc                 :    [         R                  " U5      U l        g r   r   
to_secondsrc   r   rc   s     r   r-   stop_after_delay.__init__h       **95r   r   r   c                 d    UR                   c  [        S5      eUR                   U R                  :  $ Nz4__call__() called but seconds_since_start is not set)seconds_since_startRuntimeErrorrc   r   s     r   r   stop_after_delay.__call__k   s/    **2UVV..$..@@r   rc   r   r   r    r!   r"   r   time_unit_typer-   r%   r   r&   r   r   r   ra   ra   ^   s7    6&"7"7 6D 6A$4 A Ar   ra   c                   P    \ rS rSrSrS\R                  SS4S jrSSS\4S	 jr	S
r
g)stop_before_delayq   z
Stop right before the next attempt would take place after the time from the first attempt >= limit.

Most useful when you are using with a `wait` function like wait_random_exponential, but need to make
sure that the max_delay is not exceeded.
rc   r	   Nc                 :    [         R                  " U5      U l        g r   re   rg   s     r   r-   stop_before_delay.__init__y   ri   r   r   r   c                 ~    UR                   c  [        S5      eUR                   UR                  -   U R                  :  $ rk   )rl   rm   upcoming_sleeprc   r   s     r   r   stop_before_delay.__call__|   s?    **2UVV++k.H.HH~~	
r   ro   rp   r   r   r   rs   rs   q   s4    6&"7"7 6D 6
$4 
 
r   rs   )r#   typingtenacityr   TYPE_CHECKING	threadingr   ABCr   UnionCallabler%   	StopBaseTr   r   rG   
stop_neverrL   rV   ra   rs   r   r   r   <module>r      s       	'% % LLFOO5E4F4L$MMN	7y 77y 7)  ]
#) #E EAy A&
	 
r   