3 Pf&@slddlZddlmZddlZddlZddlZdZddZGdddeZ Gdd d eZ Gd d d e Z dS) N)sixi?csBtdkr,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 rcstjfdd}|S)Ncstjf||S)N)Retryingcall)argskw)f/usr/lib/python3.6/retrying.py wrapped_f$sz-retry..wrap_simple..wrapped_f)rwraps)rr r )rr wrap_simple"szretry..wrap_simplecstjfdd}|S)Ncstjf||S)N)rr)rr)dargsdkwrr r r /sz&retry..wrap..wrapped_f)rr )rr )rr)rr wrap-szretry..wrapN)lencallable)rrr rr )rrr retrys  rc@sneZdZdddZddZddZd d Zd d Zd dZddZ ddZ ddZ ddZ ddZ ddZdS)rNFcs |dkr dn||_|dkrdn||_|dkr0dn||_|dkrBdn||_|dkrTdn||_|dkrfdn||_| dkrxdn| |_| dkrdn| |_| dkrtn| |_ |dkrdn||_ g|dk r̈j |j |dk rj |j |dk r||_n&|dkr fdd|_n t|||_ddg|dk r6j |j|dk sJ|dk rVj |j|dk sj| dk rvj |j| dk s| dk rj |j|dk r||_n&|dkr‡fd d|_n t|||_| dkr|j|_n| |_| dkr|j|_n| |_||_dS) NdirrcstfddDS)Nc3s|]}|VqdS)Nr ).0r)attemptsdelayr r asz6Retrying.__init__....)any)rr) stop_funcs)rrr asz#Retrying.__init__..c_sdS)Nrr )rkwargsr r r rhscstfddDS)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.r4Zstop_max_attempt_numberZstop_max_delayZ wait_fixedZwait_random_minZwait_random_maxZwait_incrementing_startZwait_incrementing_incrementZwait_exponential_multiplierZwait_exponential_maxZretry_on_exceptionZretry_on_resultwrap_exceptionZ stop_funcZ wait_funcZwait_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:r=r>r r r r-szRetrying.stop_after_delaycCsdS)z#Don't sleep at all before retrying.rr )r:r=r>r r r no_sleepszRetrying.no_sleepcCs|jS)z0Sleep a fixed amount of time between each retry.)r")r:r=r>r r r r0szRetrying.fixed_sleepcCstj|j|jS)zISleep a random amount of time between wait_random_min and wait_random_max)randomZrandintr#r$)r:r=r>r 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:r=r>resultr r r r2szRetrying.incrementing_sleepcCs2d|}|j|}||jkr"|j}|dkr.d}|S)Nr)r'r))r:r=r>ZexprAr r r r3s  zRetrying.exponential_sleepcCsdS)NFr )r:rAr r r r7szRetrying.never_rejectcCsdS)NTr )r:rAr r r r5szRetrying.always_rejectcCs4d}|jr ||j|jdO}n||j|jO}|S)NFr) has_exceptionr6valuer8)r:attemptZrejectr r r should_rejects zRetrying.should_rejectc Ostttjd}d}xyt||||d}Wn tj}t||d}YnX|j|sh|j|jStttjd|}|j ||r|j r|j r|jqt |n<|j ||} |j rtj|j } | td| } tj| d|d7}qWdS)NirFTrg@@)introundtimeAttemptsysexc_inforFgetr9r.rC RetryErrorr4r*r@rsleep) r:fnrrZ start_timeattempt_numberrEtbr>rOZjitterr r r rs*      z Retrying.call)NNNNNNNNNNNNNFNNN)__name__ __module__ __qualname__r<r,r-r?r0r1r2r3r7r5rFrr r r r r8s0 F   rc@s*eZdZdZddZd ddZddZd S) rJz 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)rDrQrC)r:rDrQrCr r r r<szAttempt.__init__FcCs@|jr6|rt|qs *!