U
    
Ha                     @   s  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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dS )    N)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 )
retry_basez)Abstract base class for retry strategies.r   retry_statereturnc                 C   s   d S N selfr   r   r   >/tmp/pip-unpacked-wheel-tx790h60/pip/_vendor/tenacity/retry.py__call__   s    zretry_base.__call__	retry_all)otherr   c                 C   s
   t | |S r   )r   r
   r   r   r   r   __and__    s    zretry_base.__and__	retry_anyc                 C   s
   t | |S r   )r   r   r   r   r   __or__#   s    zretry_base.__or__N)
__name__
__module____qualname____doc__abcabstractmethodboolr   r   r   r   r   r   r   r      s
   r   c                   @   s    e Zd ZdZdedddZdS )_retry_neverz-Retry strategy that never rejects any result.r   r   c                 C   s   dS NFr   r	   r   r   r   r   *   s    z_retry_never.__call__Nr   r   r   r   r   r   r   r   r   r   r   '   s   r   c                   @   s    e Zd ZdZdedddZdS )_retry_alwaysz.Retry strategy that always rejects any result.r   r   c                 C   s   dS NTr   r	   r   r   r   r   4   s    z_retry_always.__call__Nr   r   r   r   r   r   1   s   r   c                   @   s<   e Zd ZdZejegef ddddZdeddd	Z	dS )
retry_if_exceptionzARetry strategy that retries if an exception verifies a predicate.N	predicater   c                 C   s
   || _ d S r   r!   r
   r!   r   r   r   __init__>   s    zretry_if_exception.__init__r   r   c                 C   s    |j jr| |j  S dS d S r   outcomefailedr!   	exceptionr	   r   r   r   r   A   s    zretry_if_exception.__call__)
r   r   r   r   typingCallableBaseExceptionr   r$   r   r   r   r   r   r   ;   s   r   c                       sL   e Zd ZdZefejeje ej	eje df f dd fddZ
  ZS )retry_if_exception_typez=Retries if an exception has been raised of one or more types..Nexception_typesr   c                    s    | _ t  fdd d S )Nc                    s
   t |  S r   
isinstanceer.   r   r   <lambda>S       z2retry_if_exception_type.__init__.<locals>.<lambda>r.   superr$   r
   r.   	__class__r3   r   r$   K   s    z retry_if_exception_type.__init__r   r   r   r   	Exceptionr)   UnionTyper+   Tupler$   __classcell__r   r   r9   r   r,   H   s   r,   c                       sL   e Zd ZdZefejeje ej	eje df f dd fddZ
  ZS )retry_if_not_exception_typezARetries except an exception has been raised of one or more types..Nr-   c                    s    | _ t  fdd d S )Nc                    s   t |   S r   r/   r1   r3   r   r   r4   a   r5   z6retry_if_not_exception_type.__init__.<locals>.<lambda>r6   r8   r9   r3   r   r$   Y   s    z$retry_if_not_exception_type.__init__r;   r   r   r9   r   rA   V   s   rA   c                       s\   e Zd ZdZefejeje ej	eje df f dd fddZ
dedd	d
Z  ZS )retry_unless_exception_typez:Retries until an exception is raised of one or more types..Nr-   c                    s    | _ t  fdd d S )Nc                    s   t |   S r   r/   r1   r3   r   r   r4   o   r5   z6retry_unless_exception_type.__init__.<locals>.<lambda>r6   r8   r9   r3   r   r$   g   s    z$retry_unless_exception_type.__init__r   r   c                 C   s   |j jsdS | |j  S r   r%   r	   r   r   r   r   q   s    z$retry_unless_exception_type.__call__)r   r   r   r   r<   r)   r=   r>   r+   r?   r$   r   r   r@   r   r   r9   r   rB   d   s   
rB   c                   @   s>   e Zd ZdZejejgef ddddZdeddd	Z	dS )
retry_if_resultz+Retries if the result verifies a predicate.Nr    c                 C   s
   || _ d S r   r"   r#   r   r   r   r$   {   s    zretry_if_result.__init__r   r   c                 C   s    |j js| |j  S dS d S r   r&   r'   r!   resultr	   r   r   r   r   ~   s    zretry_if_result.__call__
r   r   r   r   r)   r*   Anyr   r$   r   r   r   r   r   rC   x   s   rC   c                   @   s>   e Zd ZdZejejgef ddddZdeddd	Z	dS )
retry_if_not_resultz*Retries if the result refutes a predicate.Nr    c                 C   s
   || _ d S r   r"   r#   r   r   r   r$      s    zretry_if_not_result.__init__r   r   c                 C   s"   |j js| |j   S dS d S r   rD   r	   r   r   r   r      s    zretry_if_not_result.__call__rF   r   r   r   r   rH      s   rH   c                       s8   e Zd ZdZdeje eje dd 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 r8ttd fdd}|}n:|r`t|ttdfdd}|}nt | jj dt | d S )Nz.() takes either 'message' or 'match', not both)r(   r   c                    s    t | kS r   )strr(   )rK   r   r   message_fnc   s    z8retry_if_exception_message.__init__.<locals>.message_fncc                    s   t  t| S r   )r   rL   rM   rN   )progr   r   	match_fnc   s    z6retry_if_exception_message.__init__.<locals>.match_fncz3() missing 1 required argument 'message' or 'match')		TypeErrorr:   r   r+   r   recompiler7   r$   )r
   rK   rL   rO   r!   rQ   r9   )rK   rP   r   r$      s    
z#retry_if_exception_message.__init__)NN)	r   r   r   r   r)   OptionalrM   r$   r@   r   r   r9   r   rI      s     rI   c                       sH   e Zd ZdZd
eje eje dd fddZdeddd	Z	  Z
S )retry_if_not_exception_messagez5Retries until an exception message equals or matches.NrJ   c                    s&   t  || | j  fdd| _d S )Nc                     s    | | S r   r   )Zargs_Zkwargs_Zif_predicater   r   r4      r5   z9retry_if_not_exception_message.__init__.<locals>.<lambda>)r7   r$   r!   )r
   rK   rL   r9   rW   r   r$      s    z'retry_if_not_exception_message.__init__r   r   c                 C   s   |j jsdS | |j  S r   r%   r	   r   r   r   r      s    z'retry_if_not_exception_message.__call__)NN)r   r   r   r   r)   rU   rM   r$   r   r   r@   r   r   r9   r   rV      s     
rV   c                   @   s0   e Zd ZdZeddddZdeddd	ZdS )
r   z1Retries if any of the retries condition is valid.Nretriesr   c                 G   s
   || _ d S r   rY   r
   rY   r   r   r   r$      s    zretry_any.__init__r   r   c                    s   t  fdd| jD S )Nc                 3   s   | ]}| V  qd S r   r   .0rr   r   r   	<genexpr>   s     z%retry_any.__call__.<locals>.<genexpr>)anyrY   r	   r   r_   r   r      s    zretry_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/Retries if all the retries condition are valid.NrX   c                 G   s
   || _ d S r   rZ   r[   r   r   r   r$      s    zretry_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`      s     z%retry_all.__call__.<locals>.<genexpr>)allrY   r	   r   r_   r   r      s    zretry_all.__call__rb   r   r   r   r   r      s   r   )r   rS   r)   TYPE_CHECKINGZpip._vendor.tenacityr   ABCr   r   Zretry_neverr   Zretry_alwaysr   r,   rA   rB   rC   rH   rI   rV   r   r   r   r   r   r   <module>   s&   
