1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
U
H=®dô&ã@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©úKD:\z\workplace\VsCode\pyvenv\venv\Lib\site-packages\pip/_vendor/retrying.pyÚ    wrapped_f$sz-retry.<locals>.wrap_simple.<locals>.wrapped_f©rÚwraps©r rr r rÚ wrap_simple"szretry.<locals>.wrap_simplecst ˆ¡‡‡‡fdd„ƒ}|S)NcstˆˆŽjˆf|ž|ŽSrrr)ÚdargsÚdkwr r rr/sz&retry.<locals>.wrap.<locals>.wrapped_frr©rrr rÚwrap-szretry.<locals>.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 ©ÚattemptsÚdelayr rÚ    <genexpr>asú6Retrying.__init__.<locals>.<lambda>.<locals>.<genexpr>)Úanyr )Ú
stop_funcsr rÚ<lambda>aóz#Retrying.__init__.<locals>.<lambda>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)Úselfr:r@Ú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  
 
 
 
 
 
 
 
 
zRetrying.__init__cCs
||jkS)z;Stop after the previous attempt >= stop_max_attempt_number.)r,©rFÚprevious_attempt_numberÚdelay_since_first_attempt_msr r rr8szRetrying.stop_after_attemptcCs
||jkS)z=Stop after the time from the first attempt >= stop_max_delay.)r-rWr r rr9‘szRetrying.stop_after_delaycCsdS)z#Don't sleep at all before retrying.rr rWr r rÚno_sleep•szRetrying.no_sleepcCs|jS)z0Sleep a fixed amount of time between each retry.)r.rWr r rr<™szRetrying.fixed_sleepcCst |j|j¡S)zISleep a random amount of time between wait_random_min and wait_random_max)ÚrandomÚrandintr/r0rWr 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)r1r2)rFrXrYÚresultr r rr>¡szRetrying.incrementing_sleepcCs2d|}|j|}||jkr"|j}|dkr.d}|S)Nér)r3r5)rFrXrYÚexpr]r r rr?«s
 
zRetrying.exponential_sleepcCsdS)NFr ©rFr]r r rrC´szRetrying.never_rejectcCsdS)NTr r`r r rrA·szRetrying.always_rejectcCs4d}|jr || |jd¡O}n|| |j¡O}|S)NFr)Ú has_exceptionrBÚvaluerD)rFÚattemptÚrejectr 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_inforeÚgetrEr:raÚ
RetryErrorr@r6r[r*Úsleep) rFÚfnr    r)Ú
start_timeÚattempt_numberrcÚtbrYrnÚjitterr r rrÃs(
 
 
 z Retrying.call)NNNNNNNNNNNNNFNNN)Ú__name__Ú
__module__Ú __qualname__rVr8r9rZr<r=r>r?rCrArerr r r rr8s:ó
S
        rc@s*eZdZdZdd„Zd
dd„Zdd„Zd    S) riz¾
    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)rbrqra)rFrbrqrar r rrVèszAttempt.__init__FcCs@|jr6|rt|ƒ‚q<t |jd|jd|jd¡n|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.
        rrr^N)rarmrÚreraiserb)rFrRr r rrlís
 
"z Attempt.getc    Cs:|jr&d |jd t |jd¡¡¡Sd |j|j¡SdS)NzAttempts: {0}, Error:
{1}Úr^zAttempts: {0}, Value: {1})raÚformatrqÚjoinÚ    tracebackÚ    format_tbrb©rFr r rÚ__repr__ûs zAttempt.__repr__N)F)rtrurvÚ__doc__rVrlr~r r r rriás
ric@s eZdZdZdd„Zdd„ZdS)rmzU
    A RetryError encapsulates the last Attempt instance right before giving up.
    cCs
||_dSr)Ú last_attempt)rFr€r r rrVszRetryError.__init__cCs d |j¡S)NzRetryError[{0}])ryr€r}r r rÚ__str__
szRetryError.__str__N)rtrurvrrVrr r r rrmsrm) r[Ú pip._vendorrrjrhr{r4rÚobjectrriÚ    Exceptionrmr r r rÚ<module>s *!