HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //usr/local/lib/python3.10/dist-packages/greenlet/tests/__pycache__/leakcheck.cpython-310.pyc
o

���g�.�@s ddlmZddlZddlZddlZddlmZddlZddlZej	�
d�Zej	�
d�p-eZej	�
d�Z
ep7e
Zej	�
d�ZepEej	�
d�Zej	�
d	�Zej	�
d
�Zdd�Zd
d�ZGdd�de�Zeed�rvGdd�de�Ze�e_eZndd�ZGdd�de�ZGdd�de�Zdd�ZdS)�)�print_functionN)�wraps�GITHUB_ACTIONS�TRAVIS�APPVEYOR�GREENLET_MANYLINUX�GREENLET_SKIP_LEAKCHECKS� GREENLET_SKIP_FAILING_LEAKCHECKS� 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�C/usr/local/lib/python3.10/dist-packages/greenlet/tests/leakcheck.py�ignores_leakcheckLsrcCsd|_trt�d�|�}|S)z2
    Mark that the function is known to leak.
    TzSkipping known failures)�fails_leakcheck�SKIP_FAILING_LEAKCHECKS�unittest�skiprrrrr[src@seZdZdS)�LeakCheckErrorN)�__name__�
__module__�__qualname__rrrrrdsr�
getobjectsc@�eZdZdd�Zdd�ZdS)�_MockGCcCs
t�d�S)Nr)�sysr��selfrrr�get_objectsl�
z_MockGC.get_objectscCs
tt|�S�N)�getattr�gc)r�namerrr�__getattr__nr z_MockGC.__getattr__N)rrrrr%rrrrrk�rcCs|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.
        rrrrr�fails_strict_leakcheckssr'c@r)�!ignores_types_in_strict_leakcheckcCs
||_dSr!)�types)rr)rrr�__init__~r z*ignores_types_in_strict_leakcheck.__init__cCs|j|_|Sr!)r)�leakcheck_ignore_types)rr
rrr�__call__�sz*ignores_types_in_strict_leakcheck.__call__N)rrrr*r,rrrrr(}r&r(c@sPeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�ZdS)�_RefCountCheckerrcCs(||_||_g|_i|_d|_d|_dS)NrF)�testcase�function�deltas�
peak_stats�
ignored_types�needs_setUp)rr.r/rrrr*�s
z_RefCountChecker.__init__cCs�||urdSt|�}|t|j�kr3z|j�|�}Wnty*|j�|�dk}Ynw|tur3|r3dS|j��D]	}||urAdSq8||jvsL||j	vrNdSdS)NFrT)
�type�_include_object_p�__eq__�AttributeError�__cmp__�NotImplemented�__dict__�valuesr2�
IGNORED_TYPES)r�obj�kind�exact_method_equals�xrrrr5�s$��z"_RefCountChecker._include_object_pcCstjd|j|jd�S)N)�limitr1�filter)�objgraph�growthr1r5rrrr�_growth�s
�z_RefCountChecker._growthcCsR|sdSg}tdd�|D��}|D]\}}}|�d||||f�qd�|�}|S)Nz<Unable to calculate growth>css�|]
\}}}t|�VqdSr!)�len)�.0r$�_rrr�	<genexpr>�s�z0_RefCountChecker._report_diff.<locals>.<genexpr>z%-*s%9d %+9d�
)�max�append�join)rrD�lines�widthr$�count�delta�diffrrr�_report_diff�s
z_RefCountChecker._report_diffcCs�t��}t��|jr|j��d|j_z)|j|jg|�Ri|��W|j��|j�	�d|j_d|_|r<t�
�dSdS|j��|j�	�d|j_d|_|rVt�
�ww)NFT)r#�	isenabled�disabler3r.�setUp�skipTearDownr/�tearDown�
doCleanups�enable)r�args�kwargs�
gc_enabledrrr�	_run_test�s*


�
�

�z_RefCountChecker._run_testcCs8dtjvrtjd��dtjvrtjd��|��S)N�urlparsezurllib.parse)r�modules�clear_cacherErrrr�
_growth_after�s


z_RefCountChecker._growth_aftercCsD|j}|sdStjrtdtjf��|dd�ddgkr$t|�dvr$dS|dd�gd�kr0dSt|�d	krBt|d
d��dkrBdSt|�dkrk|ddkrk|d|dkrk|d|dkrk|�|�}td
||f��t|dd��dks�t|d
d��dks�|d
d��d�dkr�d}nd}t|�|kr�td
||�|�f��dS)NTz"Generated uncollectable garbage %r���r)��F���)rrr����re���zrefcount increased by %r
%srd��)r0r#�garbagerrF�sumrSrP)rrDr0rRrArrr�
_check_deltas�s0  8
>��z_RefCountChecker._check_deltascCs�td�D]}t��qt|jdd�}|rd|j_t|jdd�|_|��}z#|�	|�rF|�
||�|��}|j�
tdd�|D���|�	|�s*Wn
tyT|sQ�YdSw|r_td	|jf��dS)
NrerFTr+rcss�|]}|dVqdS)rdNr)rG�statrrrrI+s�z,_RefCountChecker.__call__.<locals>.<genexpr>z#Expected %s to leak but it did not.)�ranger#�collectr"r/r.�expect_greenlet_leakr2rErnr^rbr0rLrmr)rr[r\rH�expect_failurerDrrrr,s,


�����z_RefCountChecker.__call__N)rrrr<r*r5rErSr^rbrnr,rrrrr-�s%

1r-cs,t�dd�str
�St���fdd��}|S)NrFcs@t|dd�rt�d��trt�dd�st�d��t|��||�S)NrFz$This class ignored during leakchecksrz(Only running tests that fail leakchecks.)r"r�SkipTest�ONLY_FAILING_LEAKCHECKSr-)rr[r\��methodrr�wrapper7s


zwrap_refcount.<locals>.wrapper)r"�SKIP_LEAKCHECKSr)rwrxrrvr�
wrap_refcount3s
rz)�
__future__r�osrr#�	functoolsrrrC�environ�get�RUNNING_ON_GITHUB_ACTIONS�RUNNING_ON_TRAVIS�RUNNING_ON_APPVEYOR�
RUNNING_ON_CI�RUNNING_ON_MANYLINUXryrrurr�AssertionErrorr�hasattr�objectrr'r(r-rzrrrr�<module>s6!	

0