
    <|h#"                        d dl mZmZmZ d dlZd dlZd dlZd dlZd dlZddl	m
Z
 d Ze
j                  rd Zned        ZddZed	        ZeZ	 d dlZ G d
 de      Zedd       Zed        Z G d de      Zy# e$ r eZeZY w xY w)    )absolute_importprint_functiondivisionN   )sysinfoc                 B     t        j                          fd       }|S )Nc                     t        j                          t        j                          t        j                         }t        j                          	  di | |rt        j                          S S # |rt        j                          w w xY w)N )gccollect	isenableddisableenable)kwenabledfuncs     W/var/www/html/test/engine/venv/lib/python3.12/site-packages/gevent/testing/openfiles.pyfz_collects.<locals>.f3   sZ    





,,.


	:":		 w		 s   A2 2B)	functoolswraps)r   r   s   ` r   	_collectsr   %   s'     __T
 
 H    c                  ,    t        j                  d      )Nzlsof not expected on Windows)unittestSkipTestr
   r   r   	_run_lsofr   C   s     >??r   c                     dd l } t        j                         }| j                  d      \  }}t        j                  |       d|d|}t        j
                  |      rt        j                  d      t        |      5 }|j                         j                         }d d d        t        j                  |       S # 1 sw Y    xY w)Nr   get_open_fileszlsof -p z > zlsof failed)tempfileosgetpidmkstempclosesystemr   r   openreadstripremove)r   pidfdtmpnamelsof_commandfobjdatas          r   r   r   F   s    iik&&'78G
,/999\"##M22'] 	'd99;$$&D	'
		'	' 	's   ?B==Cc                 "   t               }i }|j                  d      D ]  }|j                         }|r|j                  d      r't	        j                  d|      }|d d \  }}}}	|	d d j                         s|	j                         sk| s|	d   j                         r|	d   j                         st        |	d d       n
t        |	      }	|	|v r$|	|||j                  |	      |f}
t        d|
z        |||	<    |st        d|      ||d<   |S )	N
COMMANDz\s+   zUerror when parsing lsof output: duplicate fd=%r
line=%r
split=%r
previous=%r
data:
%szfailed to parse lsof:
r.   )	r   splitr'   
startswithreisdigitintgetAssertionError)pipes_kwargsr.   resultsliner4   _command_pid_userr*   paramss              r   default_get_open_filesrC   V   s    ;DG

4  zz|ty1& %*"1I!$rcr7??

RV^^-%'V^^%5RW3r7BW}dE7;;r?DA$  &B  EK  &K  L  LGBK%& DCDDGFONr   c                  $   t         j                  j                  d      r5dt        j                         z  } t	        t        j
                  |             S 	 t	        t        d            dz
  S # t        t        t        j                  f$ r Y yw xY w)N/proc//proc/%d/fdT)r;   r   r   )r    pathexistsr!   lenlistdirr   OSErrorr:   r   r   )fd_directorys    r   default_get_number_open_filesrM   q   so    	ww~~h$ryy{22::l+,,>-.22^X%6%67 s   A. .BBc                       e Zd ZdZd Zy)_TrivialOpenFiler*   c                     || _         y NrP   )selfr*   s     r   __init__z_TrivialOpenFile.__init__   s	    DGr   N)__name__
__module____qualname__	__slots__rT   r
   r   r   rO   rO      s    		r   rO   c                 Z   i }t        d      D ]  }	 | rLt        j                  j                  d      r-dt        j                         z  }t        j
                  |      }ng }t        j                         }|j                         |d<   |dxx   |j                  d      z  cc<    n t        j                  d      |d   D ]  }|||j                  <    |D ]   }||vst        |      }	t        |	      ||	<   " |dxx   d|fgz  cc<   |dxx   d|fgz  cc<   |S # t        $ r Y w xY w)	a  
        Return a list of popenfile and pconn objects.

        Note that other than `fd`, they have different attributes.

        .. important:: If you want to find open sockets, on Windows
           and linux, it is important that the socket at least be listening
           (socket.listen(1)). Unlike the lsof implementation, this will only
           return sockets in a state like that.
           rE   rF   r.   allzUnable to read open fileszFrom psutilzfd files)ranger    rG   rH   r!   rJ   psutilProcess
open_filesconnectionsrK   r   r   r*   r8   rO   )
count_closing_as_open_kwr=   _rL   fd_filesprocessxfd_strr*   s
             r   r   r      s=    q 	AA(RWW^^H-E $1299;#>L!zz,7H!H ..*")"4"4"67#6#6u#==/	A8 ##$?@@ 	AGADDM	 	3FW$[.r2	3 	]G455Z233  s   BD	D*)D*c                  j    t        j                         } 	 | j                         S # t        $ r Y yw xY w)Nr   )r]   r^   num_fdsAttributeError)re   s    r   get_number_open_filesrk      s2    .."	??$$ 		s   & 	22c                   ,     e Zd ZdZ fdZ fdZ xZS )DoesNotLeakFilesMixinz
    A test case mixin that helps find a method that's leaking an
    open file.

    Only mix this in when needed to debug, it slows tests down.
    c                 H    t               | _        t        t        |           y rR   )rk   (_DoesNotLeakFilesMixin__open_files_countsuperrm   setUp)rS   	__class__s    r   rq   zDoesNotLeakFilesMixin.setUp   s    "7"9#T02r   c           	          t         t        |           t               }|| j                  kD  r&t        d| j                  d|dt                     y )NzToo many open files. Before: z
 < After: z.
)rp   rm   tearDownrk   ro   r:   r   )rS   afterrr   s     r   rt   zDoesNotLeakFilesMixin.tearDown   sP    #T35%'4*** ++"$  +r   )rU   rV   rW   __doc__rq   rt   __classcell__)rr   s   @r   rm   rm      s    3
 
r   rm   )F)T)
__future__r   r   r   r    r   r6   r   r    r   r   WINr   rC   rM   lsof_get_open_filesr]   objectrO   r   rk   ImportErrorrm   r
   r   r   <module>r~      s   ( A @ 	  	 	  : ;;@  6 	 	 - K 
6 
 4 4l  F W  :+N9:s   A; ;	BB