zmc
2023-08-08 e792e9a60d958b93aef96050644f369feb25d61b
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
66
67
68
69
70
71
U
¸ý°d™.ã@s ddlmZddlZddlZddlZddlmZddlZddlZej     
d¡Z ej     
d¡pZe Z ej     
d¡Z e pne Zej     
d¡ZepŠej     
d¡Zej     
d    ¡Zej     
d
¡Zd d „Zd d„ZGdd„deƒZeedƒrìGdd„deƒZeƒe_eZndd„ZGdd„deƒZGdd„deƒZdd„ZdS)é)Úprint_functionN)ÚwrapsZGITHUB_ACTIONSZTRAVISZAPPVEYORZGREENLET_MANYLINUXZGREENLET_SKIP_LEAKCHECKSZ GREENLET_SKIP_FAILING_LEAKCHECKSZ GREENLET_ONLY_FAILING_LEAKCHECKScCs
d|_|S)aç
    Ignore the given object during leakchecks.
 
    Can be applied to a method, in which case the method will run, but
    will not be subject to leak checks.
 
    If applied to a class, the entire class will be skipped during leakchecks. This
    is intended to be used for classes that are very slow and cause problems such as
    test timeouts; typically it will be used for classes that are subclasses of a base
    class and specify variants of behaviour (such as pool sizes).
    T)Úignore_leakcheck©Úfunc©rúOd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\greenlet/tests/leakcheck.pyÚignores_leakcheckLs r    cCsd|_trt d¡|ƒ}|S)z2
    Mark that the function is known to leak.
    TzSkipping known failures)Úfails_leakcheckÚSKIP_FAILING_LEAKCHECKSÚunittestÚskiprrrrr
[sr
c@s eZdZdS)ÚLeakCheckErrorN)Ú__name__Ú
__module__Ú __qualname__rrrrrdsrÚ
getobjectsc@seZdZdd„Zdd„ZdS)Ú_MockGCcCs
t d¡S)Nr)Úsysr©ÚselfrrrÚ get_objectslsz_MockGC.get_objectscCs
tt|ƒS©N)ÚgetattrÚgc)rÚnamerrrÚ __getattr__nsz_MockGC.__getattr__N)rrrrrrrrrrksrcCs|S)a
        Decorator for a function that is known to fail when running
        strict (``sys.getobjects()``) leakchecks.
 
        This type of leakcheck finds all objects, even those, such as
        strings, which are not tracked by the garbage collector.
        rrrrrÚfails_strict_leakcheckssrc@seZdZdd„Zdd„ZdS)Ú!ignores_types_in_strict_leakcheckcCs
||_dSr)Útypes)rrrrrÚ__init__~sz*ignores_types_in_strict_leakcheck.__init__cCs |j|_|Sr)rÚleakcheck_ignore_types)rrrrrÚ__call__€sz*ignores_types_in_strict_leakcheck.__call__N)rrrr r"rrrrr}src@sPeZdZdZdd„Zdd„Zdd„Zdd    „Zd
d „Zd d „Z    dd„Z
dd„Z dS)Ú_RefCountCheckerrcCs(||_||_g|_i|_d|_d|_dS)NrF)ÚtestcaseÚfunctionÚdeltasÚ
peak_statsÚ ignored_typesÚ needs_setUp)rr$r%rrrr ‹s z_RefCountChecker.__init__cCs¢||kr dSt|ƒ}|t|jƒkrhz|j |¡}Wn$tk
rV|j |¡dk}YnX|tk    rh|rhdS|j ¡D]}||krrdSqr||jksš||j    krždSdS)NFrT)
ÚtypeÚ_include_object_pÚ__eq__ÚAttributeErrorZ__cmp__ÚNotImplementedÚ__dict__Úvaluesr(Ú IGNORED_TYPES)rÚobjÚkindZexact_method_equalsÚxrrrr+–s  z"_RefCountChecker._include_object_pcCstjd|j|jdS)N)Úlimitr'Úfilter)ÚobjgraphÚgrowthr'r+rrrrÚ_growth»s
ÿz_RefCountChecker._growthcCsR|sdSg}tdd„|Dƒƒ}|D] \}}}| d||||f¡q"d |¡}|S)Nz<Unable to calculate growth>css|]\}}}t|ƒVqdSr)Úlen)Ú.0rÚ_rrrÚ    <genexpr>Äsz0_RefCountChecker._report_diff.<locals>.<genexpr>z %-*s%9d %+9dÚ
)ÚmaxÚappendÚjoin)rr8ÚlinesÚwidthrÚcountÚdeltaÚdiffrrrÚ _report_diff¿s
z_RefCountChecker._report_diffcCsvt ¡}t ¡|jr(|j ¡d|j_z|j
|jf|ž|ŽW5|j ¡|j ¡d|j_d|_|rpt     ¡XdS)NFT) rÚ    isenabledÚdisabler)r$ZsetUpZ skipTearDownZtearDownZ
doCleanupsÚenabler%)rÚargsÚkwargsZ
gc_enabledrrrÚ    _run_testÌs
 
 
z_RefCountChecker._run_testcCs8dtjkrtjd ¡dtjkr0tjd ¡| ¡S)NÚurlparsez urllib.parse)rÚmodulesÚ clear_cacher9rrrrÚ _growth_afterÝs
 
 
z_RefCountChecker._growth_aftercCsN|j}|sdStjr$tdtjfƒ‚|dd…ddgkrHt|ƒdkrHdS|dd…dddgkrbdSt|ƒdkr†t|d    d…ƒdkr†dSt|ƒd
krØ|d dkrØ|d |dkrØ|d|dkrØ| |¡}td ||fƒ‚t|dd…ƒdkst|d    d…ƒdks|d    d… d¡d kr"d}nd}t|ƒ|krJtd || |¡fƒ‚dS)NTz"Generated uncollectable garbage %réþÿÿÿr)ééFéýÿÿÿééüÿÿÿrTéÿÿÿÿzrefcount increased by %r
%srSé é)r&rÚgarbagerr:ÚsumrGrD)rr8r&rFr5rrrÚ _check_deltasæs0   8
Dÿÿz_RefCountChecker._check_deltascCsºtdƒD] }t ¡qt|jddƒ}|r0d|j_t|jddƒ|_| ¡}z>|     |¡r„| 
||¡|  ¡}|j   tdd„|Dƒƒ¡qJWntk
r |sœ‚YnX|r¶td    |jfƒ‚dS)
NrTr
FTr!rcss|]}|dVqdS)rSNr)r;Ústatrrrr=*sz,_RefCountChecker.__call__.<locals>.<genexpr>z#Expected %s to leak but it did not.)ÚrangerZcollectrr%r$Zexpect_greenlet_leakr(r9r]rMrQr&r@r\r)rrKrLr<Zexpect_failurer8rrrr"s" 
 
  z_RefCountChecker.__call__N) rrrr1r r+r9rGrMrQr]r"rrrrr#„s %     1r#cs,tˆddƒstrˆStˆƒ‡fdd„ƒ}|S)NrFcs@t|ddƒrt d¡‚tr0tˆddƒs0t d¡‚t|ˆƒ||ƒS)NrFz$This class ignored during leakchecksr
z(Only running tests that fail leakchecks.)rr ZSkipTestÚONLY_FAILING_LEAKCHECKSr#)rrKrL©ÚmethodrrÚwrapper6s
 
 
zwrap_refcount.<locals>.wrapper)rÚSKIP_LEAKCHECKSr)rbrcrrarÚ wrap_refcount2s
re)Ú
__future__rÚosrrÚ    functoolsrr r7ÚenvironÚgetZRUNNING_ON_GITHUB_ACTIONSZRUNNING_ON_TRAVISZRUNNING_ON_APPVEYORZ RUNNING_ON_CIZRUNNING_ON_MANYLINUXrdr r`r    r
ÚAssertionErrorrÚhasattrÚobjectrrrr#rerrrrÚ<module>s4  !         
 
/