
0c@_&                 @   s   d  d l  Z  d  d l m Z d  d l Z d  d l Z d  d l Z d Z d d   Z Gd d   d e  Z	 Gd d	   d	 e  Z
 Gd
 d   d e  Z d S)    N)sixi?c                 sY   t     d k r< t   d  r< d d   } |   d  S   f d d   } | Sd S)z
    Decorator function that instantiates the Retrying object
    @param *dargs: positional arguments passed to Retrying object
    @param **dkw: keyword arguments passed to the Retrying object
       r   c                s%   t  j      f d d    } | S)Nc                 s   t    j   |  |  S)N)Retryingcall)argskw)f 3/tmp/pip-build-jynh7p1z/pip/pip/_vendor/retrying.py	wrapped_f$   s    z-retry.<locals>.wrap_simple.<locals>.wrapped_f)r   wraps)r   r   r	   )r   r
   wrap_simple"   s    !zretry.<locals>.wrap_simplec                s+   t  j        f d d    } | S)Nc                 s   t       j  |  |  S)N)r   r   )r   r   )dargsdkwr   r	   r
   r   /   s    z&retry.<locals>.wrap.<locals>.wrapped_f)r   r   )r   r   )r   r   )r   r
   wrap-   s    'zretry.<locals>.wrapN)lencallable)r   r   r   r   r	   )r   r   r
   retry   s
    "r   c               @   s   e  Z d  Z d d d d d d d d d d d d d d d d d d d  Z d d   Z d d   Z d	 d
   Z d d   Z d d   Z d d   Z	 d d   Z
 d d   Z d d   Z d d   Z d d   Z d S)r   NFc                s  | d  k r d n | |  _  | d  k r- d n | |  _ | d  k rH d n | |  _ | d  k rc d n | |  _ | d  k r~ d n | |  _ | d  k r d n | |  _ |	 d  k r d n |	 |  _ |
 d  k r d n |
 |  _ | d  k r t n | |  _	 | d  k rd n | |  _
 g    | d  k	 r0  j |  j  | d  k	 rL  j |  j  | d  k	 rd| |  _ n6 | d  k r  f d d   |  _ n t |  |  |  _ d d   g  | d  k	 r j |  j  | d  k	 s| d  k	 r j |  j  | d  k	 s|	 d  k	 r j |  j  |
 d  k	 s-| d  k	 r= j |  j  | d  k	 rU| |  _ n6 | d  k ry f d	 d   |  _ n t |  |  |  _ | d  k r|  j |  _ n	 | |  _ | d  k r|  j |  _ n	 | |  _ | |  _ d  S)
N   d   i  r   r   c                s    t     f d d    D  S)Nc             3   s   |  ] } |     Vq d  S)Nr	   ).0r   )attemptsdelayr	   r
   	<genexpr>a   s    z6Retrying.__init__.<locals>.<lambda>.<locals>.<genexpr>)any)r   r   )
stop_funcs)r   r   r
   <lambda>a   s    z#Retrying.__init__.<locals>.<lambda>c              _   s   d S)Nr   r	   )r   kwargsr	   r	   r
   r   h   s    c                s    t     f d d    D  S)Nc             3   s   |  ] } |     Vq d  S)Nr	   )r   r   )r   r   r	   r
   r   y   s    z6Retrying.__init__.<locals>.<lambda>.<locals>.<genexpr>)max)r   r   )
wait_funcs)r   r   r
   r   y   s    )_stop_max_attempt_number_stop_max_delay_wait_fixed_wait_random_min_wait_random_max_wait_incrementing_start_wait_incrementing_increment_wait_exponential_multiplierMAX_WAIT_wait_exponential_max_wait_jitter_maxappendstop_after_attemptstop_after_delaystopgetattrfixed_sleeprandom_sleepincrementing_sleepexponential_sleepwaitalways_reject_retry_on_exceptionnever_reject_retry_on_result_wrap_exception)selfr.   r4   stop_max_attempt_numberstop_max_delay
wait_fixedwait_random_minwait_random_maxwait_incrementing_startwait_incrementing_incrementwait_exponential_multiplierwait_exponential_maxretry_on_exceptionretry_on_resultwrap_exception	stop_func	wait_funcwait_jitter_maxr	   )r   r   r
   __init__:   sR    		zRetrying.__init__c             C   s   | |  j  k S)z;Stop after the previous attempt >= stop_max_attempt_number.)r    )r:   previous_attempt_numberdelay_since_first_attempt_msr	   r	   r
   r,      s    zRetrying.stop_after_attemptc             C   s   | |  j  k S)z=Stop after the time from the first attempt >= stop_max_delay.)r!   )r:   rK   rL   r	   r	   r
   r-      s    zRetrying.stop_after_delayc             C   s   d S)z#Don't sleep at all before retrying.r   r	   )r:   rK   rL   r	   r	   r
   no_sleep   s    zRetrying.no_sleepc             C   s   |  j  S)z0Sleep a fixed amount of time between each retry.)r"   )r:   rK   rL   r	   r	   r
   r0      s    zRetrying.fixed_sleepc             C   s   t  j |  j |  j  S)zISleep a random amount of time between wait_random_min and wait_random_max)randomrandintr#   r$   )r:   rK   rL   r	   r	   r
   r1      s    zRetrying.random_sleepc             C   s.   |  j  |  j | d } | d k  r* d } | S)z
        Sleep an incremental amount of time after each attempt, starting at
        wait_incrementing_start and incrementing by wait_incrementing_increment
        r   r   )r%   r&   )r:   rK   rL   resultr	   r	   r
   r2      s    zRetrying.incrementing_sleepc             C   sE   d | } |  j  | } | |  j k r/ |  j } | d k  rA d } | S)N   r   )r'   r)   )r:   rK   rL   exprP   r	   r	   r
   r3      s    
	zRetrying.exponential_sleepc             C   s   d S)NFr	   )r:   rP   r	   r	   r
   r7      s    zRetrying.never_rejectc             C   s   d S)NTr	   )r:   rP   r	   r	   r
   r5      s    zRetrying.always_rejectc             C   sF   d } | j  r, | |  j | j d  O} n | |  j | j  O} | S)NFr   )has_exceptionr6   valuer8   )r:   attemptrejectr	   r	   r
   should_reject   s
    	zRetrying.should_rejectc          
   O   sS  t  t t j   d   } d } x*y t | | |   | d  } Wn& t j   } t | | d  } Yn X|  j |  s | j |  j  St  t t j   d   | } |  j	 | |  r |  j r | j
 r | j    qAt |   nR |  j | |  }	 |  j r0t j   |  j }
 |	 t d |
  }	 t j |	 d  | d 7} q% Wd  S)Ni  r   FTr   g     @@)introundtimeAttemptsysexc_inforW   getr9   r.   rS   
RetryErrorr4   r*   rN   r   sleep)r:   fnr   r   
start_timeattempt_numberrU   tbrL   r`   jitterr	   r	   r
   r      s*     	zRetrying.call)__name__
__module____qualname__rJ   r,   r-   rM   r0   r1   r2   r3   r7   r5   rW   r   r	   r	   r	   r
   r   8   s0   F
		r   c               @   s=   e  Z d  Z d Z d d   Z d d d  Z d d   Z d	 S)
r[   z
    An Attempt encapsulates a call to a target function that may end as a
    normal return value from the function or an Exception depending on what
    occurred during the execution.
    c             C   s   | |  _  | |  _ | |  _ d  S)N)rT   rc   rS   )r:   rT   rc   rS   r	   r	   r
   rJ      s    		zAttempt.__init__Fc             C   sT   |  j  rI | r t |    qP t j |  j d |  j d |  j d  n |  j Sd S)z
        Return the return value of this Attempt instance or raise an Exception.
        If wrap_exception is true, this Attempt is wrapped inside of a
        RetryError before being raised.
        r   r   rQ   N)rS   r_   r   reraiserT   )r:   rF   r	   r	   r
   r^      s
    	+zAttempt.getc             C   sO   |  j  r5 d j |  j d j t j |  j d    Sd j |  j |  j  Sd  S)NzAttempts: {0}, Error:
{1} rQ   zAttempts: {0}, Value: {1})rS   formatrc   join	traceback	format_tbrT   )r:   r	   r	   r
   __repr__   s    	,zAttempt.__repr__N)rf   rg   rh   __doc__rJ   r^   ro   r	   r	   r	   r
   r[      s   r[   c               @   s.   e  Z d  Z d Z d d   Z d d   Z d S)r_   zU
    A RetryError encapsulates the last Attempt instance right before giving up.
    c             C   s   | |  _  d  S)N)last_attempt)r:   rq   r	   r	   r
   rJ     s    zRetryError.__init__c             C   s   d j  |  j  S)NzRetryError[{0}])rk   rq   )r:   r	   r	   r
   __str__
  s    zRetryError.__str__N)rf   rg   rh   rp   rJ   rr   r	   r	   r	   r
   r_     s   r_   )rN   Zpip._vendorr   r\   rZ   rm   r(   r   objectr   r[   	Exceptionr_   r	   r	   r	   r
   <module>   s   !