o
    tPf#                      @   s   d dl mZ d dlZd dlZd dlmZ d dlZzd dlZW n ey)   dZY nw d dl	Z	d dl
Z	dd ZG dd deZdd	 ZdS )
    )print_functionN)wrapsc                 C   s
   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   Y/var/www/html/humari/django-venv/lib/python3.10/site-packages/gevent/testing/leakcheck.pyignores_leakcheck%   s   r   c                   @   s   e Zd ZeefZzejjZ	W n e
y   ddlmZ	 Y nw dd Zdd Zdd Zd	d
 Zdd Zdd Zdd Zdd ZdS )_RefCountCheckerr   )callbackc                 C   s"   || _ || _g | _i | _d| _d S )NF)testcasefunctiondeltas
peak_statsneeds_setUp)selfr   r   r   r   r   __init__A   s
   
z_RefCountChecker.__init__c              	   C   s   || u rdS z|| j  v s|| jkrW dS W n ttfy#   Y dS w t|}|| jv r/dS || ju r@|jd u r@|j	d u r@dS dS NFT)
__dict__values_ignore_object_pAttributeError	TypeErrortypeIGNORED_TYPESCALLBACK_KINDr
   args)r   objkindr   r   r   r   K   s    

z!_RefCountChecker._ignore_object_pc                 C   s   t jd | j| jdS )N)limitr   filter)objgraphgrowthr   r   r   r   r   r   _growthj   s   z_RefCountChecker._growthc                 C   sR   |sdS g }t dd |D }|D ]\}}}|d||||f  qd|}|S )Nz<Unable to calculate growth>c                 s   s    | ]
\}}}t |V  qd S )N)len).0name_r   r   r   	<genexpr>r   s    z0_RefCountChecker._report_diff.<locals>.<genexpr>z%-*s%9d %+9d
)maxappendjoin)r   r!   lineswidthr&   countdeltadiffr   r   r   _report_diffm   s   
z_RefCountChecker._report_diffc                 C   s   t  }t   | jr| j  d| j_z)| j| jg|R i | W | j  | j	  d| j_d| _|r<t 
  d S d S | j  | j	  d| j_d| _|rVt 
  w w r   )gc	isenableddisabler   r   setUpskipTearDownr   tearDown
doCleanupsenable)r   r   kwargs
gc_enabledr   r   r   	_run_testz   s*   





z_RefCountChecker._run_testc                 C   s8   dt jv rt jd   dt jv rt jd   |  S )Nurlparsezurllib.parse)sysmodulesclear_cacher#   r"   r   r   r   _growth_after   s
   

z_RefCountChecker._growth_afterc                 C   sD  | j }|sdS tjrtdtjf |dd  ddgkr$t|dv r$dS |dd  g dkr0dS t|d	krBt|d
d  dkrBdS t|dkrk|d dkrk|d |d krk|d |d krk| |}td||f t|dd  dkst|d
d  dks|d
d  ddkrd}nd}t||krtd|| |f dS )NTz"Generated uncollectable garbage %rr   )      F)r   r   r      rE   zrefcount increased by %r
%srD         )r   r3   garbageAssertionErrorr$   sumr2   r/   )r   r!   r   r1   r   r   r   r   _check_deltas   s0     8
>z_RefCountChecker._check_deltasc                 C   sh   t dD ]}t  q|  }| |r2| || |  }| jt	dd |D  | |sd S d S )NrE   c                 s   s    | ]}|d  V  qdS )rD   Nr   )r%   statr   r   r   r(      s    z,_RefCountChecker.__call__.<locals>.<genexpr>)
ranger3   collectr#   rO   r=   rB   r   r+   rN   )r   r   r;   r'   r!   r   r   r   __call__   s   

z_RefCountChecker.__call__N)__name__
__module____qualname__tupledictr   geventcorer
   r   r   gevent._ffi.callbackr   r   r#   r2   r=   rB   rO   rS   r   r   r   r   r	   4   s    
	1r	   c                    sZ   t d u s
t ddr!t d u rdd l}|d t dd }|S t  fdd}|S )	Nr   Fr   z+objgraph not available, leakchecks disabledc                 _   s   |  d d S )Nz%This method ignored during leakchecks)skipTest)r   _args_kwargsr   r   r    _method_skipped_during_leakcheck   s   z7wrap_refcount.<locals>._method_skipped_during_leakcheckc                    s&   t | ddrtdt|  ||S )Nr   Fz$This class ignored during leakchecks)getattrunittestSkipTestr	   )r   r   r;   methodr   r   wrapper   s   
zwrap_refcount.<locals>.wrapper)r    r`   warningswarnr   )rd   rf   r_   re   r   rc   r   wrap_refcount   s   

rh   )
__future__r   r?   r3   	functoolsr   ra   r    ImportErrorrY   gevent.corer   objectr	   rh   r   r   r   r   <module>   s     "