Y&@sddlZddlmZddlZddlZddlZdZddZGdddeZ Gdd d eZ Gd d d e Z dS) N)sixi?csYtdkr<tdr<dd}|dSfdd}|SdS)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 rcs%tjfdd}|S)Ncstj||S)N)Retryingcall)argskw)f3/tmp/pip-build-3puug3g5/pip/pip/_vendor/retrying.py wrapped_f$sz-retry..wrap_simple..wrapped_f)rwraps)rr r )rr wrap_simple"s!zretry..wrap_simplecs+tjfdd}|S)Ncstj||S)N)rr)rr)dargsdkwrr r r /sz&retry..wrap..wrapped_f)rr )rr )rr)rr wrap-s'zretry..wrapN)lencallable)rrr rr )rrr retrys " rc@seZdZdddddddddddddddddddZddZddZd d Zd d Zd dZddZ ddZ ddZ ddZ ddZ ddZdS)rNFcs|dkrdn||_|dkr-dn||_|dkrHdn||_|dkrcdn||_|dkr~dn||_|dkrdn||_| dkrdn| |_| dkrdn| |_| dkrtn| |_ |dkrdn||_ g|dk r0j |j |dk rLj |j |dk rd||_n6|dkrfdd|_nt|||_ddg|dk rj |j|dk s|dk rj |j|dk s| dk rj |j| dk s-| dk r=j |j|dk rU||_n6|dkryfd d|_nt|||_| dkr|j|_n | |_| dkr|j|_n | |_||_dS) Ndirrcs tfddDS)Nc3s|]}|VqdS)Nr ).0r)attemptsdelayr r asz6Retrying.__init__....)any)rr) stop_funcs)rrr asz#Retrying.__init__..c_sdS)Nrr )rkwargsr r r rhscs tfddDS)Nc3s|]}|VqdS)Nr )rr)rrr r rysz6Retrying.__init__....)max)rr) wait_funcs)rrr rys)_stop_max_attempt_number_stop_max_delay _wait_fixed_wait_random_min_wait_random_max_wait_incrementing_start_wait_incrementing_increment_wait_exponential_multiplierMAX_WAIT_wait_exponential_max_wait_jitter_maxappendstop_after_attemptstop_after_delaystopgetattr fixed_sleep random_sleepincrementing_sleepexponential_sleepwait always_reject_retry_on_exception never_reject_retry_on_result_wrap_exception)selfr.r4stop_max_attempt_numberstop_max_delay wait_fixedwait_random_minwait_random_maxwait_incrementing_startwait_incrementing_incrementwait_exponential_multiplierwait_exponential_maxretry_on_exceptionretry_on_resultwrap_exception stop_func wait_funcwait_jitter_maxr )rrr __init__:sR             zRetrying.__init__cCs ||jkS)z;Stop after the previous attempt >= stop_max_attempt_number.)r )r:previous_attempt_numberdelay_since_first_attempt_msr r r r,szRetrying.stop_after_attemptcCs ||jkS)z=Stop after the time from the first attempt >= stop_max_delay.)r!)r:rKrLr r r r-szRetrying.stop_after_delaycCsdS)z#Don't sleep at all before retrying.rr )r:rKrLr r r no_sleepszRetrying.no_sleepcCs|jS)z0Sleep a fixed amount of time between each retry.)r")r:rKrLr r r r0szRetrying.fixed_sleepcCstj|j|jS)zISleep a random amount of time between wait_random_min and wait_random_max)randomrandintr#r$)r:rKrLr r r r1szRetrying.random_sleepcCs.|j|j|d}|dkr*d}|S)z Sleep an incremental amount of time after each attempt, starting at wait_incrementing_start and incrementing by wait_incrementing_increment rr)r%r&)r:rKrLresultr r r r2s zRetrying.incrementing_sleepcCsEd|}|j|}||jkr/|j}|dkrAd}|S)Nr)r'r))r:rKrLexprPr r r r3s    zRetrying.exponential_sleepcCsdS)NFr )r:rPr r r r7szRetrying.never_rejectcCsdS)NTr )r:rPr r r r5szRetrying.always_rejectcCsFd}|jr,||j|jdO}n||j|jO}|S)NFr) has_exceptionr6valuer8)r:attemptrejectr r r should_rejects  zRetrying.should_rejectc OsStttjd}d}x*yt||||d}Wn&tj}t||d}YnX|j|s|j|jStttjd|}|j ||r|j r|j r|jqAt |nR|j ||} |j r0tj|j } | td| } tj| d|d7}q%WdS)NirFTrg@@)introundtimeAttemptsysexc_inforWgetr9r.rS RetryErrorr4r*rNrsleep) r:fnrr start_timeattempt_numberrUtbrLr`jitterr r r rs*   z Retrying.call)__name__ __module__ __qualname__rJr,r-rMr0r1r2r3r7r5rWrr r r r r8s0 F        rc@s=eZdZdZddZdddZddZd 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. cCs||_||_||_dS)N)rTrcrS)r:rTrcrSr r r rJs  zAttempt.__init__FcCsT|jrI|rt|qPtj|jd|jd|jdn|jSdS)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. rrrQN)rSr_rreraiserT)r:rFr r r r^s  +z Attempt.getcCsO|jr5dj|jdjtj|jdSdj|j|jSdS)NzAttempts: {0}, Error: {1}rQzAttempts: {0}, Value: {1})rSformatrcjoin traceback format_tbrT)r:r r r __repr__s ,zAttempt.__repr__N)rfrgrh__doc__rJr^ror r r r r[s  r[c@s.eZdZdZddZddZdS)r_zU A RetryError encapsulates the last Attempt instance right before giving up. cCs ||_dS)N) last_attempt)r:rqr r r rJszRetryError.__init__cCsdj|jS)NzRetryError[{0}])rkrq)r:r r r __str__ szRetryError.__str__N)rfrgrhrprJrrr r r r r_s  r_) rN pip._vendorrr\rZrmr(robjectrr[ Exceptionr_r r r r s     !