a
    WŠÝg  ã                   @   sÜ   d dl Z d dlZd dlmZ ejr6d dlZd dlmZ G dd„ de jƒZej	eej
dgef f ZG dd„ deƒZG d	d
„ d
eƒZG dd„ deƒZeƒ 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 )é    N)Ú_utils)ÚRetryCallStatec                   @   sF   e Zd ZdZejdedœdd„ƒZd ddœdd	„Zd d
dœdd„Z	dS )Ú	stop_basez(Abstract base class for stop strategies.r   ©Úretry_stateÚreturnc                 C   s   d S ©N© ©Úselfr   r	   r	   ú[/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/tenacity/stop.pyÚ__call__   s    zstop_base.__call__Ústop_all)Úotherr   c                 C   s
   t | |ƒS r   )r   ©r   r   r	   r	   r   Ú__and__"   s    zstop_base.__and__Ústop_anyc                 C   s
   t | |ƒS r   )r   r   r	   r	   r   Ú__or__%   s    zstop_base.__or__N)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚabcÚabstractmethodÚboolr   r   r   r	   r	   r	   r   r      s
   r   r   c                   @   s0   e Zd ZdZeddœdd„Zdedœdd	„ZdS )
r   z+Stop if any of the stop condition is valid.N©Ústopsr   c                 G   s
   || _ d S r   ©r   ©r   r   r	   r	   r   Ú__init__/   s    zstop_any.__init__r   r   c                    s   t ‡ fdd„| jD ƒƒS )Nc                 3   s   | ]}|ˆ ƒV  qd S r   r	   ©Ú.0Úx©r   r	   r   Ú	<genexpr>3   ó    z$stop_any.__call__.<locals>.<genexpr>)Úanyr   r
   r	   r#   r   r   2   s    zstop_any.__call__©r   r   r   r   r   r   r   r   r	   r	   r	   r   r   ,   s   r   c                   @   s0   e Zd ZdZeddœdd„Zdedœdd	„ZdS )
r   z*Stop if all the stop conditions are valid.Nr   c                 G   s
   || _ d S r   r   r   r	   r	   r   r   9   s    zstop_all.__init__r   r   c                    s   t ‡ fdd„| jD ƒƒS )Nc                 3   s   | ]}|ˆ ƒV  qd S r   r	   r    r#   r	   r   r$   =   r%   z$stop_all.__call__.<locals>.<genexpr>)Úallr   r
   r	   r#   r   r   <   s    zstop_all.__call__r'   r	   r	   r	   r   r   6   s   r   c                   @   s    e Zd ZdZdedœdd„ZdS )Ú_stop_neverzNever stop.r   r   c                 C   s   dS )NFr	   r
   r	   r	   r   r   C   s    z_stop_never.__call__N)r   r   r   r   r   r   r	   r	   r	   r   r)   @   s   r)   c                   @   s0   e Zd ZdZdddœdd„Zdedœd	d
„ZdS )Ústop_when_event_setz!Stop when the given event is set.zthreading.EventN)Úeventr   c                 C   s
   || _ d S r   )r+   )r   r+   r	   r	   r   r   M   s    zstop_when_event_set.__init__r   r   c                 C   s
   | j  ¡ S r   )r+   Úis_setr
   r	   r	   r   r   P   s    zstop_when_event_set.__call__)r   r   r   r   r   r   r   r	   r	   r	   r   r*   J   s   r*   c                   @   s0   e Zd ZdZeddœdd„Zdedœdd	„ZdS )
Ústop_after_attemptz.Stop when the previous attempt >= max_attempt.N)Úmax_attempt_numberr   c                 C   s
   || _ d S r   )r.   )r   r.   r	   r	   r   r   W   s    zstop_after_attempt.__init__r   r   c                 C   s   |j | jkS r   )Úattempt_numberr.   r
   r	   r	   r   r   Z   s    zstop_after_attempt.__call__)r   r   r   r   Úintr   r   r   r	   r	   r	   r   r-   T   s   r-   c                   @   s2   e Zd ZdZejddœdd„Zdedœdd	„ZdS )
Ústop_after_delayaS  
    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.
    N©Ú	max_delayr   c                 C   s   t  |¡| _d S r   ©r   Ú
to_secondsr3   ©r   r3   r	   r	   r   r   h   s    zstop_after_delay.__init__r   r   c                 C   s   |j d u rtdƒ‚|j | jkS ©Nz4__call__() called but seconds_since_start is not set)Úseconds_since_startÚRuntimeErrorr3   r
   r	   r	   r   r   k   s    
zstop_after_delay.__call__©	r   r   r   r   r   Ztime_unit_typer   r   r   r	   r	   r	   r   r1   ^   s   	r1   c                   @   s2   e Zd ZdZejddœdd„Zdedœdd	„ZdS )
Ústop_before_delaya  
    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.
    Nr2   c                 C   s   t  |¡| _d S r   r4   r6   r	   r	   r   r   y   s    zstop_before_delay.__init__r   r   c                 C   s$   |j d u rtdƒ‚|j |j | jkS r7   )r8   r9   Zupcoming_sleepr3   r
   r	   r	   r   r   |   s    

ÿÿzstop_before_delay.__call__r:   r	   r	   r	   r   r;   q   s   r;   )r   ÚtypingÚtenacityr   ÚTYPE_CHECKINGÚ	threadingr   ÚABCr   ÚUnionÚCallabler   Z	StopBaseTr   r   r)   Ú
stop_neverr*   r-   r1   r;   r	   r	   r	   r   Ú<module>   s   



