o
    ê6WjJ#  ã                   @   s6  d dl Z d dlZd dlZejr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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G dd„ d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G dd„ deƒZG dd„ deƒZdS ) é    N)Ú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 )Ú
retry_basez)Abstract base class for retry strategies.Úretry_stater   Úreturnc                 C   s   d S ©N© ©Úselfr   r   r   ú]/home/esfera/Documents/content_generation/venv/lib/python3.10/site-packages/tenacity/retry.pyÚ__call__   s   zretry_base.__call__ÚotherÚ	retry_allc                 C   ó
   |  | ¡S r   )Ú__rand__©r	   r   r   r   r
   Ú__and__    ó   
zretry_base.__and__c                 C   ó
   t || ƒS r   )r   r   r   r   r
   r   #   r   zretry_base.__rand__Ú	retry_anyc                 C   r   r   )Ú__ror__r   r   r   r
   Ú__or__&   r   zretry_base.__or__c                 C   r   r   )r   r   r   r   r
   r   )   r   z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      s    


r   r   c                   @   ó"   e Zd ZdZdddefdd„ZdS )Ú_retry_neverz-Retry strategy that never rejects any result.r   r   r   c                 C   ó   dS )NFr   r   r   r   r
   r   3   ó   z_retry_never.__call__N©r   r   r   r   r   r   r   r   r   r
   r   0   ó    r   c                   @   r   )Ú_retry_alwaysz.Retry strategy that always rejects any result.r   r   r   c                 C   r    )NTr   r   r   r   r
   r   =   r!   z_retry_always.__call__Nr"   r   r   r   r
   r$   :   r#   r$   c                   @   s@   e Zd ZdZdejeg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__G   r   zretry_if_exception.__init__r   r   c                 C   sB   |j d u r	tdƒ‚|j jr|j  ¡ }|d u rtdƒ‚|  |¡S dS )Nú(__call__() called before outcome was setú(outcome failed but the exception is NoneF©ÚoutcomeÚRuntimeErrorÚfailedÚ	exceptionr&   ©r	   r   r1   r   r   r
   r   J   s   


zretry_if_exception.__call__)
r   r   r   r   ÚtypingÚCallableÚBaseExceptionr   r*   r   r   r   r   r
   r%   D   s    r%   c                       óN   e Zd ZdZefdejeje ej	eje df f ddf‡ fdd„Z
‡  ZS )Úretry_if_exception_typez=Retries if an exception has been raised of one or more types.Úexception_types.r   Nc                    ó   ˆ | _ tƒ  ‡ fdd„¡ d S )Nc                    s
   t | ˆ ƒS r   ©Ú
isinstance©Úe©r8   r   r
   Ú<lambda>b   s   
 z2retry_if_exception_type.__init__.<locals>.<lambda>©r8   Úsuperr*   ©r	   r8   ©Ú	__class__r>   r
   r*   Z   ó   z retry_if_exception_type.__init__©r   r   r   r   Ú	Exceptionr3   ÚUnionÚTyper5   ÚTupler*   Ú__classcell__r   r   rC   r
   r7   W   ó    ûÿÿþúr7   c                       r6   )Úretry_if_not_exception_typezARetries except an exception has been raised of one or more types.r8   .r   Nc                    r9   )Nc                    ó   t | ˆ ƒ S r   r:   r<   r>   r   r
   r?   p   ó    z6retry_if_not_exception_type.__init__.<locals>.<lambda>r@   rB   rC   r>   r
   r*   h   rE   z$retry_if_not_exception_type.__init__rF   r   r   rC   r
   rM   e   rL   rM   c                       s`   e Zd ZdZefdejeje ej	eje df f ddf‡ fdd„Z
dd	defd
d„Z‡  ZS )Úretry_unless_exception_typez:Retries until an exception is raised of one or more types.r8   .r   Nc                    r9   )Nc                    rN   r   r:   r<   r>   r   r
   r?   ~   rO   z6retry_unless_exception_type.__init__.<locals>.<lambda>r@   rB   rC   r>   r
   r*   v   rE   z$retry_unless_exception_type.__init__r   r   c                 C   óB   |j d u r	tdƒ‚|j jsdS |j  ¡ }|d u rtdƒ‚|  |¡S ©Nr+   Tr,   r-   r2   r   r   r
   r   €   s   


z$retry_unless_exception_type.__call__)r   r   r   r   rG   r3   rH   rI   r5   rJ   r*   r   r   rK   r   r   rC   r
   rP   s   s    ûÿÿþú
rP   c                   @   sX   e Zd ZdZefdejeje ej	eje df f ddfdd„Z
dd	defd
d„ZdS )Úretry_if_exception_cause_typezåRetries if any of the causes of the raised exception is of one or more types.

    The check on the type of the cause of the exception is done recursively (until finding
    an exception in the chain that has no `__cause__`)
    r8   .r   Nc                 C   r'   r   )Úexception_cause_typesrB   r   r   r
   r*   •   s   
z&retry_if_exception_cause_type.__init__r   r   c                 C   sP   |j d u r	tdƒ‚|j jr&|j  ¡ }|d ur&t|j| jƒrdS |j}|d usdS )Nz&__call__ called before outcome was setTF)r.   r/   r0   r1   r;   Ú	__cause__rT   )r	   r   Úexcr   r   r
   r   ž   s   

ýz&retry_if_exception_cause_type.__call__)r   r   r   r   rG   r3   rH   rI   r5   rJ   r*   r   r   r   r   r   r
   rS   Ž   s    ûÿÿþ
ú	rS   c                   @   óB   e Zd ZdZdejejg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*   ¯   r   zretry_if_result.__init__r   r   c                 C   s.   |j d u r	tdƒ‚|j js|  |j  ¡ ¡S dS ©Nr+   F©r.   r/   r0   r&   Úresultr   r   r   r
   r   ²   s
   
zretry_if_result.__call__©
r   r   r   r   r3   r4   ÚAnyr   r*   r   r   r   r   r
   rX   ¬   ó     rX   c                   @   rW   )Úretry_if_not_resultz*Retries if the result refutes a predicate.r&   r   Nc                 C   r'   r   r(   r)   r   r   r
   r*   ¿   r   zretry_if_not_result.__init__r   r   c                 C   s0   |j d u r	tdƒ‚|j js|  |j  ¡ ¡ S dS rY   rZ   r   r   r   r
   r   Â   s
   
zretry_if_not_result.__call__r\   r   r   r   r
   r_   ¼   r^   r_   c                	       sL   e Zd ZdZ		ddeje dejdeeje f ddf‡ fdd„Z	‡  Z
S )	Úretry_if_exception_messagez2Retries if an exception message equals or matches.NÚmessageÚmatchr   c                    s†   ˆ r|rt | jj› d�ƒ‚ˆ rdtdtf‡ fdd„}|}n|r2t |¡‰dtdtf‡fdd„}|}n	t | jj› d�ƒ‚tƒ  |¡ d S )	Nz.() takes either 'message' or 'match', not bothr1   r   c                    s   ˆ t | ƒkS r   )Ústr©r1   )ra   r   r
   Úmessage_fncÜ   s   z8retry_if_exception_message.__init__.<locals>.message_fncc                    s   t ˆ  t| ƒ¡ƒS r   )r   rb   rc   rd   )Úprogr   r
   Ú	match_fncã   s   z6retry_if_exception_message.__init__.<locals>.match_fncz3() missing 1 required argument 'message' or 'match')	Ú	TypeErrorrD   r   r5   r   ÚreÚcompilerA   r*   )r	   ra   rb   re   r&   rg   rC   )ra   rf   r
   r*   Ï   s   ÿ
ÿz#retry_if_exception_message.__init__©NN)r   r   r   r   r3   ÚOptionalrc   rH   ÚPatternr*   rK   r   r   rC   r
   r`   Ì   s    ýþýür`   c                	       s^   e Zd ZdZ		ddeje dejdeeje f ddf‡ fdd„Z	dd	de
fd
d„Z‡  ZS )Úretry_if_not_exception_messagez5Retries until an exception message equals or matches.Nra   rb   r   c                    s&   t ƒ  ||¡ | j‰ ‡ fdd„| _d S )Nc                     s   ˆ | i |¤Ž S r   r   )Úargs_Úkwargs_©Úif_predicater   r
   r?   ú   s    z9retry_if_not_exception_message.__init__.<locals>.<lambda>)rA   r*   r&   )r	   ra   rb   rC   rq   r
   r*   ò   s   z'retry_if_not_exception_message.__init__r   r   c                 C   rQ   rR   r-   r2   r   r   r
   r   ü   s   


z'retry_if_not_exception_message.__call__rk   )r   r   r   r   r3   rl   rc   rH   rm   r*   r   r   rK   r   r   rC   r
   rn   ï   s    ýþýü
rn   c                   @   ó4   e Zd ZdZde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   ©rt   ©r	   rt   r   r   r
   r*     r   zretry_any.__init__r   r   c                    ó   t ‡ fdd„| jD ƒƒS )Nc                 3   ó   � | ]}|ˆ ƒV  qd S r   r   ©Ú.0Úr©r   r   r
   Ú	<genexpr>  ó   € z%retry_any.__call__.<locals>.<genexpr>)Úanyrt   r   r   r|   r
   r     ó   zretry_any.__call__©r   r   r   r   r   r*   r   r   r   r   r   r
   r   	  ó    r   c                   @   rs   )r   z/Retries if all the retries condition are valid.rt   r   Nc                 G   r'   r   ru   rv   r   r   r
   r*     r   zretry_all.__init__r   r   c                    rw   )Nc                 3   rx   r   r   ry   r|   r   r
   r}     r~   z%retry_all.__call__.<locals>.<genexpr>)Úallrt   r   r   r|   r
   r     r€   zretry_all.__call__r�   r   r   r   r
   r     r‚   r   )r   ri   r3   ÚTYPE_CHECKINGÚtenacityr   ÚABCr   rH   r4   r   Ú
RetryBaseTr   Úretry_neverr$   Úretry_alwaysr%   r7   rM   rP   rS   rX   r_   r`   rn   r   r   r   r   r   r
   Ú<module>   s,   #
