U ÀÒ.eô&ã@slddlZddlmZddlZddlZddlZdZdd„ZGdd„deƒZ Gdd „d eƒZ Gd d „d e ƒZ dS) éN)Úsixiÿÿÿ?csBtˆƒdkr,tˆdƒr,dd„}|ˆdƒS‡‡fdd„}|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 ércst ˆ¡‡fdd„ƒ}|S)Ncstƒjˆf|ž|ŽS©N©ÚRetryingÚcall©ÚargsÚkw©Úf©ú8/usr/lib/python3.8/site-packages/pip/_vendor/retrying.pyÚ wrapped_f$sz-retry..wrap_simple..wrapped_f©rÚwraps©r rr r rÚ wrap_simple"szretry..wrap_simplecst ˆ¡‡‡‡fdd„ƒ}|S)NcstˆˆŽjˆf|ž|ŽSrrr)ÚdargsÚdkwr r rr/sz&retry..wrap..wrapped_frr©rrr rÚwrap-szretry..wrapN)ÚlenÚcallable)rrrrr rrÚretrys  rc@sneZdZddd„Zdd„Zdd„Zd d „Zd d „Zd d„Zdd„Z dd„Z dd„Z dd„Z dd„Z dd„ZdS)rNFcs |dkr dn||_|dkrdn||_|dkr0dn||_|dkrBdn||_|dkrTdn||_|dkrfdn||_| dkrxdn| |_| dkrŠdn| |_| dkrœtn| |_ |dkr®dn||_ g‰|dk r̈  |j ¡|dk ràˆ  |j ¡|dk rð||_n&|dk�r ‡fdd„|_n t||ƒ|_dd„g‰|dk �r6ˆ  |j¡|dk �sJ|dk �rVˆ  |j¡|dk �sj| dk �rvˆ  |j¡| dk �sŠ| dk �r–ˆ  |j¡|dk �r¨||_n&|dk�r‡fd d„|_n t||ƒ|_| dk�râ|j|_n| |_| dk�rü|j|_n| |_||_dS) Néédéèrrcst‡‡fdd„ˆDƒƒS)Nc3s|]}|ˆˆƒVqdSrr ©Ú.0r ©ZattemptsZdelayr rÚ asú6Retrying.__init__....)Úanyr )Ú stop_funcsr rÚaóz#Retrying.__init__..c_sdS)Nrr )r Úkwargsr r rr%hr&cst‡‡fdd„ˆDƒƒS)Nc3s|]}|ˆˆƒVqdSrr rr r rr!ysr")Úmaxr )Ú wait_funcsr rr%yr&)Ú_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)Úselfr8r>Zstop_max_attempt_numberZstop_max_delayZ wait_fixedZwait_random_minZwait_random_maxZwait_incrementing_startZwait_incrementing_incrementZwait_exponential_multiplierZwait_exponential_maxZretry_on_exceptionZretry_on_resultÚwrap_exceptionZ stop_funcZ wait_funcZwait_jitter_maxr )r$r)rÚ__init__:sR                 zRetrying.__init__cCs ||jkS)z;Stop after the previous attempt >= stop_max_attempt_number.)r*©rDÚprevious_attempt_numberÚdelay_since_first_attempt_msr r rr6�szRetrying.stop_after_attemptcCs ||jkS)z=Stop after the time from the first attempt >= stop_max_delay.)r+rGr r rr7‘szRetrying.stop_after_delaycCsdS)z#Don't sleep at all before retrying.rr rGr r rÚno_sleep•szRetrying.no_sleepcCs|jS)z0Sleep a fixed amount of time between each retry.)r,rGr r rr:™szRetrying.fixed_sleepcCst |j|j¡S)zISleep a random amount of time between wait_random_min and wait_random_max)ÚrandomZrandintr-r.rGr r rr;�szRetrying.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/r0)rDrHrIÚresultr r rr<¡szRetrying.incrementing_sleepcCs2d|}|j|}||jkr"|j}|dkr.d}|S)Nér)r1r3)rDrHrIZexprLr r rr=«s  zRetrying.exponential_sleepcCsdS)NFr ©rDrLr r rrA´szRetrying.never_rejectcCsdS)NTr rNr r rr?·szRetrying.always_rejectcCs4d}|jr || |jd¡O}n|| |j¡O}|S)NFr)Ú has_exceptionr@ÚvaluerB)rDÚattemptZrejectr r rÚ should_rejectºs zRetrying.should_rejectc Osôttt ¡dƒƒ}d}zt|||Ž|dƒ}Wn t ¡}t||dƒ}YnX| |¡sf| |j¡Sttt ¡dƒƒ|}|  ||¡rª|js |j r | ¡‚qæt |ƒ‚n<|  ||¡} |j rØt ¡|j } | td| ƒ} t | d¡|d7}qdS)NrrFTrg@�@)ÚintÚroundÚtimeÚAttemptÚsysÚexc_inforRÚgetrCr8rOÚ RetryErrorr>r4rKr(Úsleep) rDÚfnr r'Z start_timeÚattempt_numberrQÚtbrIr[Zjitterr r rrÃs(       z Retrying.call)NNNNNNNNNNNNNFNNN)Ú__name__Ú __module__Ú __qualname__rFr6r7rJr:r;r<r=rAr?rRrr r r rr8s:ó S   rc@s*eZdZdZdd„Zd dd„Zdd„Zd S) rVz¾ 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||_||_||_dSr)rPr]rO)rDrPr]rOr r rrFèszAttempt.__init__FcCs@|jr6|rt|ƒ‚qs *!