
    <|h#                          d dl mZ d dlZd dlZd dlmZ d dlZ	 d dlZd dl	Z	d dl
Z	d Z G d de      Zd Zy# e$ r dZY #w xY w)    )print_functionN)wrapsc                     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)funcs    W/var/www/html/test/engine/venv/lib/python3.12/site-packages/gevent/testing/leakcheck.pyignores_leakcheckr	   %   s     !DK    c                       e Zd ZeefZ	 ej                  j                  Z	d Zd Zd Zd Zd Zd Zd	 Zd
 Zy# e
$ r	 ddlmZ	 Y &w xY w)_RefCountCheckerr   )callbackc                 J    || _         || _        g | _        i | _        d| _        y )NF)testcasefunctiondeltas
peak_statsneeds_setUp)selfr   r   s      r   __init__z_RefCountChecker.__init__A   s(       !r
   c                    || u ry	 || j                   j                         v s|| j                  k(  ry	 t        |      }|| j                  v ry|| j                  u r|j                  |j                  yy# t        t        f$ r Y yw xY wNFT)
__dict__values_ignore_object_pAttributeError	TypeErrortypeIGNORED_TYPESCALLBACK_KINDr   args)r   objkinds      r   r   z!_RefCountChecker._ignore_object_pK   s    $;	 t}}++--$/// 0 Cy4%%%4%%%#,,*>388CS
  	* 	 		s   +A6 6BBc                 Z    t        j                  d | j                  | j                        S )N)limitr   filter)objgraphgrowthr   r   r   s    r   _growthz_RefCountChecker._growthj   s    TdoodNcNcddr
   c                     |syg }t        d |D              }|D ]  \  }}}|j                  d||||fz           dj                  |      }|S )Nz<Unable to calculate growth>c              3   :   K   | ]  \  }}}t        |        y w)N)len).0name_s      r   	<genexpr>z0_RefCountChecker._report_diff.<locals>.<genexpr>r   s     7*$1CI7s   z%-*s%9d %+9d
)maxappendjoin)r   r'   lineswidthr.   countdeltadiffs           r   _report_diffz_RefCountChecker._report_diffm   sd    1777"( 	GD%LL5$u*EEF	G yyr
   c                    t        j                         }t        j                          | j                  r+| j                  j                          d| j                  _        	  | j                  | j                  g|i | | j                  j                          | j                  j                          d| j                  _        d| _        |rt        j                          y y # | j                  j                          | j                  j                          d| j                  _        d| _        |rt        j                          w w xY wr   )gc	isenableddisabler   r   setUpskipTearDownr   tearDown
doCleanupsenable)r   r    kwargs
gc_enableds       r   	_run_testz_RefCountChecker._run_testz   s    \\^



MM!).DMM&	DMM$--9$9&9MM""$MM$$&)-DMM&#D		 	 MM""$MM$$&)-DMM&#D		 s   ! C% %A%E
c                     dt         j                  v r!t         j                  d   j                          dt         j                  v r!t         j                  d   j                          | j                         S )Nurlparsezurllib.parse)sysmodulesclear_cacher)   r(   s    r   _growth_afterz_RefCountChecker._growth_after   sP    $KK
#//1S[[(KK'335||~r
   c                 t   | j                   }|syt        j                  rt        dt        j                        |dd  ddgk(  rt	        |      dv ry|dd  g dk(  ryt	        |      d	k\  rt        |d
d        dk(  ryt	        |      dk\  r@|d   dkD  r8|d   |d   k(  r-|d   |d   k(  r"| j                  |      }t        d|d|      t        |dd        dk  s(t        |d
d        dk  s|d
d  j                  d      dk\  rd}nd}t	        |      |k\  r t        d|d| j                  |            y)NTz Generated uncollectable garbage r   )      F)r   r   r      rP   zrefcount increased by r1   rO         )r   r<   garbageAssertionErrorr,   sumr:   r7   )r   r'   r   r9   r$   s        r   _check_deltasz_RefCountChecker._check_deltas   sZ   
 :: !UVV "#;1a& S[F%:"#;)#v;!F23K 0A 5v;!r
Q6":3KPVWYPZ^deg^hPh$$V,D 64!PQQ vbc{q Crs$4$9VBC[=N=Nq=QUV=VEEv;% $*$($5$5f$="? @ @
 r
   c                 N   t        d      D ]  }t        j                           | j                         }| j	                  |      r`| j                  ||       | j                         }| j                  j                  t        d |D                     | j	                  |      r_y y )NrP   c              3   &   K   | ]	  }|d      yw)rO   N )r-   stats     r   r0   z,_RefCountChecker.__call__.<locals>.<genexpr>   s     #?DG#?s   )
ranger<   collectr)   rZ   rF   rL   r   r3   rY   )r   r    rD   r/   r'   s        r   __call__z_RefCountChecker.__call__   s    q 	AJJL	
   (NN4('')FKKs#?#?@A   (r
   N)__name__
__module____qualname__tupledictr   geventcorer   r   r   gevent._ffi.callbackr   r   r)   r:   rF   rL   rZ   ra   r]   r
   r   r   r   4   sd    
 DNMC,,!>e
"/bBS  CBCs   9 AAr   c                      t         t         dd      r.t         dd l}|j                  d       t	               d        }|S t	                fd       }|S )Nr   Fr   z+objgraph not available, leakchecks disabledc                 &    | j                  d       y )Nz%This method ignored during leakchecks)skipTest)r   _args_kwargss      r    _method_skipped_during_leakcheckz7wrap_refcount.<locals>._method_skipped_during_leakcheck   s    MMABr
   c                 n    t        | dd      rt        j                  d       t        |       ||      S )Nr   Fz$This class ignored during leakchecks)getattrunittestSkipTestr   )r   r    rD   methods      r   wrapperzwrap_refcount.<locals>.wrapper   s9    4+U3##$JKK-f-dF;;r
   )r&   rq   warningswarnr   )rt   rv   ro   ru   s   `   r   wrap_refcountrx      sh    76+=uEMMGH	v	C 
	C// 6]< <
 Nr
   )
__future__r   rI   r<   	functoolsr   rr   r&   ImportErrorrg   gevent.corer	   objectr   rx   r]   r
   r   <module>r~      sX   ( & 
 	  
  ^Bv ^BBq  Hs   8 AA