o
    \h                     @   s   d dl Z d dlZd dlmZ d dlmZ ejrd dlmZ G dd deZejeej	dgej
e f f 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)
retry_base)RetryCallStatec                   @   sp   e Zd ZdZejdddefddZ					dd
dZ					dddZ					dddZ
				dddZdS )async_retry_basez/Abstract base class for async retry strategies.retry_stater   returnc                    s   d S N selfr   r	   r	   Y/home/air/segue/gemini/backup/venv/lib/python3.10/site-packages/tenacity/asyncio/retry.py__call__   s   zasync_retry_base.__call__other*typing.Union[retry_base, async_retry_base]	retry_allc                 C   
   t | |S r   r   r   r   r	   r	   r   __and__!      
zasync_retry_base.__and__c                 C   
   t || S r   r   r   r	   r	   r   __rand__&   r   zasync_retry_base.__rand__	retry_anyc                 C   r   r   r   r   r	   r	   r   __or__+   r   zasync_retry_base.__or__c                 C   r   r   r   r   r	   r	   r   __ror__0   r   zasync_retry_base.__ror__N)r   r   r   r   )r   r   r   r   )__name__
__module____qualname____doc__abcabstractmethodboolr   r   r   r   r   r	   r	   r	   r   r      s0    


r   r   c                   @   sF   e Zd ZdZdejegeje f ddfddZ	dddefd	d
Z
dS )retry_if_exceptionzARetry strategy that retries if an exception verifies a predicate.	predicater   Nc                 C   
   || _ d S r   r$   r   r$   r	   r	   r   __init__>   r   zretry_if_exception.__init__r   r   c                    sJ   |j d u r
td|j jr#|j  }|d u rtd| |I d H S dS )N(__call__() called before outcome was setz(outcome failed but the exception is NoneF)outcomeRuntimeErrorfailed	exceptionr$   )r   r   r-   r	   r	   r   r   C   s   

zretry_if_exception.__call__)r   r   r   r   typingCallableBaseException	Awaitabler"   r(   r   r	   r	   r	   r   r#   ;   s    
r#   c                   @   sH   e Zd ZdZdejejgeje f ddfddZ	dddefd	d
Z
dS )retry_if_resultz+Retries if the result verifies a predicate.r$   r   Nc                 C   r%   r   r&   r'   r	   r	   r   r(   S   r   zretry_if_result.__init__r   r   c                    s6   |j d u r
td|j js| |j  I d H S dS )Nr)   F)r*   r+   r,   r$   resultr
   r	   r	   r   r   X   s   
zretry_if_result.__call__)r   r   r   r   r.   r/   Anyr1   r"   r(   r   r	   r	   r	   r   r2   P   s    
r2   c                   @   >   e Zd ZdZdejeef ddfddZddde	fd	d
Z
dS )r   z1Retries if any of the retries condition is valid.retriesr   Nc                 G   r%   r   r6   r   r6   r	   r	   r   r(   e      
zretry_any.__init__r   r   c                    s8   d}| j D ]}|pt||I d H }|r |S q|S )NFr6   r   wrap_to_async_funcr   r   r3   rr	   r	   r   r   h      
zretry_any.__call__r   r   r   r   r.   Unionr   r   r(   r"   r   r	   r	   r	   r   r   b       r   c                   @   r5   )r   z/Retries if all the retries condition are valid.r6   r   Nc                 G   r%   r   r7   r8   r	   r	   r   r(   t   r9   zretry_all.__init__r   r   c                    s8   d}| j D ]}|ot||I d H }|s |S q|S )NTr:   r<   r	   r	   r   r   w   r>   zretry_all.__call__r?   r	   r	   r	   r   r   q   rA   r   )r    r.   tenacityr   r   TYPE_CHECKINGr   r   r@   r/   r1   r"   
RetryBaseTr#   r2   r   r   r	   r	   r	   r   <module>   s   