HEX
Server: Apache
System: Linux server2.voipitup.com.au 4.18.0-553.109.1.lve.el8.x86_64 #1 SMP Thu Mar 5 20:23:46 UTC 2026 x86_64
User: posscale (1027)
PHP: 8.2.30
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //opt/saltstack/salt/lib/python3.10/site-packages/cherrypy/lib/__pycache__/gctools.cpython-310.pyc
o

�N�g��@s�ddlZddlZddlZddlZzddlZWney!dZYnwddlZddlmZmZddl	m
Z
Gdd�de�Zdd�Z
Gdd	�d	e
�Zeej�Ze��d
d�ZGdd
�d
e�ZdS)�N)�
_cprequest�_cpwsgi)�SimplePluginc@sBeZdZdZdZddd�Zdd	d
�Zdd�Zddd�Zdd�Z	dS)�ReferrerTreezDAn object which gathers all referrers of an object to a given depth.�(N��
cCs,|pg|_|j�t��j�||_||_dS)N)�ignore�append�inspect�currentframe�f_back�maxdepth�
maxparents)�selfr	rr�r�H/opt/saltstack/salt/lib/python3.10/site-packages/cherrypy/lib/gctools.py�__init__s

zReferrerTree.__init__�cCs�|d7}g}t�|�}|j�|�t|�|jkr!dt|�gfgSz|jj}Wnty5|jj	j
}Ynw|D]+}t�|�rE|j
|urEq8||jvrKq8||jkr\|�||�||�f�q8|�|gf�q8|S)z>Return a nested list containing referrers of the given object.rz[%s referrers])�gcZ
get_referrersr	r
�lenr�ascend�__code__�AttributeErrorZim_funcZ	func_coder�isframe�f_coder)r�obj�depth�parentsZrefsZ
ascendcode�parentrrrrs(
�

zReferrerTree.ascendcCs>t|�|jdkr|jd}|d|�d||d�S|S)z&Return s, restricted to a sane length.�rNz...)r�peek_length)r�sZhalfrrr�peek8s
zReferrerTree.peekTc	s�t�|�rt�|�\}}}}}d|S|s��t|��St|t�r3dd��fdd�|��D��dSt|t	�rHdd��fdd�|D��d	St|t
�r]d
d��fdd�|D��dS��t|��}t|ttt
f�rn|Sd
t|�|fS)z2Return a string representation of a single object.z<frame of function '%s'>�{z, cs0g|]\}}d�j|dd��j|dd�f�qS)�%s: %sF��descend��_format��.0�k�v�rrr�
<listcomp>Js
�
�z(ReferrerTree._format.<locals>.<listcomp>�}�[c�g|]	}�j|dd��qS�Fr&r(�r+�itemr.rrr/N���]�(cr2r3r(r4r.rrr/Qr6�)r%)rrZgetframeinfor#�repr�
isinstance�dict�join�items�list�tuple�str�int�float�type)	rrr'�filename�lineno�func�context�index�rrr.rr)@s6

��
��
��zReferrerTree._formatcs"g�d���fdd�	��|��S)z>Return a list of string reprs from a nested list of referrers.rcs<|D]\}}��d|��|��|r�||d�qdS)N�    r)r
r))�branchrrZgrandparents�r�outputrrrr]s��z#ReferrerTree.format.<locals>.ascendN�rr)r�treerrMr�formatYszReferrerTree.format)NrrrO)T)
�__name__�
__module__�__qualname__�__doc__r!rrr#r)rQrrrrrs


rcs�fdd�t��D�S)Ncsg|]	}t|��r|�qSr)r;)r+�x��clsrrr/gsz!get_instances.<locals>.<listcomp>)rZget_objectsrWrrWr�
get_instancesfsrYc@s$eZdZdd�Zdd�Zdd�ZdS)�RequestCountercCs
d|_dS)Nr��countr.rrr�startls
zRequestCounter.startcCs|jd7_dS�Nrr[r.rrr�before_requesto�zRequestCounter.before_requestcCs|jd8_dSr^r[r.rrr�
after_requestrr`zRequestCounter.after_requestN)rRrSrTr]r_rarrrrrZjsrZcCsht|tj�rd|j|jfSt|tj�rd|jSt|tj�r(d|j	�
dd�St|d�r2d|jSdS)Nzpath=%s;stage=%sz	status=%szPATH_INFO=%sZ	PATH_INFO��	tb_linenoztb_lineno=%s)
r;r�RequestZ	path_infoZstage�Response�statusr�AppResponse�environ�get�hasattrrc)rrrr�get_contextzs


rkc@sTeZdZdZejdddfejdddfejdddfgZ	e
jdd��Ze
jdd	��Z
d
S)�GCRootz4A CherryPy page handler for testing reference leaks.rz<Should be 1 in this request thread and 1 in the main thread.rz(Should be 1 in this request thread only.cCsdS)Nz
Hello, world!rr.rrrrI�szGCRoot.indexc
Csdg}td�D]}tjdkrnt�d�q|�d�t��t��t��}|rvtdur;t�	d�}|r;tj
|dd�i}tjD]}|�t
|�d�d	|t
|�<q@|rv|�dd
|�dd�|��D�}|��|D]}|�d
t|��qji}|jD]\}	}
}}t|	�||	<q{|jD]z\}	}
}}||	}
t|
�}||
ks�||k�r|
|kr�|�d|
|	|f�n|�d|
||	|f�|
D]F}tdur�t|
�tt���g}d|	jt|�f}tj
||dd|td�|�dt|�t�|�f�t|
gdd�}|�|�}|�|�|��q�q�d� |�S)NzStatistics:rrg�?z"
Not all requests closed properly.ZNondestructiblezfinalizers.png)rErz
%s unreachable objects:cSsg|]\}}||f�qSrrr*rrrr/�sz GCRoot.stats.<locals>.<listcomp>rKz#
Expected %s %r references, got %s.z)
Expected %s to %s %r references, got %s.zgraph_%s_%s.png��)Zextra_ignoreZ	max_depthZtoo_manyrEZ
extra_infoz 
Referrers for %s (refcount=%s):r )r	r�
)!�range�request_counterr\�time�sleepr
rZcollect�objgraphZby_typeZ
show_backrefsZgarbagerirD�insertr>�sortr:�classesrYr�idrrrRrk�sys�getrefcountrr�extendrQr=)rrNZtrialZunreachable�finalZtrashrV�pairZallobjsrXZminobjZmaxobj�msgZobjsZlenobjrZig�fname�trPrrr�stats�sr



��
����
�
zGCRoot.statsN)rRrSrTrUrrdrerrgrw�cherrypyZexposerIr�rrrrrl�s ����	
rl)rrryrrrt�ImportErrorr�rrZcherrypy.process.pluginsr�objectrrYrZZenginerqZ	subscriberkrlrrrr�<module>s&�V