a
    GDfr                  
   @   sh  d Z ddlmZ ddl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	Z	ddl
Z
ddlZddlZddlZddlmZ ddl	mZ ddl	mZ ddl	mZ zdd	l	mZ W n ey   dZY n0 zdd
l	mZ W n ey   dZY n0 ejd dkZer
ddlZndZeedZe Zg dZejdkZejdkZ ej!"dZ#ej!"dZ$e$Z%ej!"dZ&ej!"dZ'ej!"dZ(e&pe'pe(Z)ej!"dZ*ej!"dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2dZ3dZ4d Z5d!Z6d"Z7d#Z8d$Z9d%Z:d&Z;d'Z<d(Z=d)Z>d*Z?d+Z@d,ZAd-ZBd.ZCd/ZDd0ZEedu r&d1ZFd2ZGdZHn G d3d4 d4ejIZJeK LeJjM edu rZd5ZNd6ZOn G d7d8 d8ejIZPeK LePjM eQ ZResd9ZSn0zeT ZSW n" eUy   erd:nd9ZSY n0 ed;g d<ZVed=g d>ZWed?g d@ZXedAg dBZYedCg dDZZedEg dFZ[edGg dHZ\edIg dJZ]edKg dLZ^edMg dNZ_edOg dPZ`edQg dRZaedSg dTZbedUdVdWgZcedXg dYZdedZd[d\gZeed]g d^Zfed_g d`Zgedag d`Zhedbg dcZiedddedfgZjedgdhdigZkedjg dkZledldmdngZmeeegeegfeegegfegegfeegegfegegfeegeegfegeegfegeegfdoZnedurenLegegfegegfdp edurenLdqegeegfi G drds dseoZpG dtdu duepZqG dvdw dweqZrG dxdy dyepZsG dzd{ d{epZterBeuevewr.evd| Zxn
eyevd|Zxexd} nd~d ZzdddZ{dd Z|dd Z}dd Z~dd Ze|dd Zdd Zdd Zdd ZdddZdd ZG dd dZdd Ze Zeje_eje_dZdd Zdd ZeefddZefddZdddZdd Zer&dd Zndd Ze|ejfddZdddZddejfddZdd ZdS )z9Common objects shared by __init__.py and _ps*.py modules.    )division)print_functionN)
namedtuple)AF_INET)
SOCK_DGRAM)SOCK_STREAM)AF_INET6)AF_UNIX   PSUTIL_DEBUG)RFREEBSDBSDLINUXNETBSDOPENBSDMACOSOSXPOSIXSUNOSWINDOWS
CONN_CLOSECONN_CLOSE_WAITCONN_CLOSINGCONN_ESTABLISHEDCONN_FIN_WAIT1CONN_FIN_WAIT2CONN_LAST_ACKCONN_LISTEN	CONN_NONECONN_SYN_RECVCONN_SYN_SENTCONN_TIME_WAITNIC_DUPLEX_FULLNIC_DUPLEX_HALFNIC_DUPLEX_UNKNOWNSTATUS_DEADSTATUS_DISK_SLEEPSTATUS_IDLESTATUS_LOCKEDSTATUS_RUNNINGSTATUS_SLEEPINGSTATUS_STOPPEDSTATUS_SUSPENDEDSTATUS_TRACING_STOPSTATUS_WAITINGSTATUS_WAKE_KILLSTATUS_WAKINGSTATUS_ZOMBIESTATUS_PARKEDENCODINGENCODING_ERRSr   pconn	pcputimespctxswpgidspiopionice	popenfilepthreadpuidssconn	scpustatssdiskio	sdiskpart
sdiskusagesnetiosnicaddr	snicstatssswapsuser	conn_tmapdeprecated_methodisfile_strictmemoizeparse_environ_blockpath_exists_strictusage_percentsupports_ipv6sockfam_to_enumsocktype_to_enumwrap_numbers	open_textopen_binarycatbcatbytes2humanconn_to_ntupledebughiliteterm_supports_colorsprint_colorposixntlinuxdarwin)ZfreebsdZmidnightbsdZopenbsdZnetbsd)sunossolarisaixZrunningZsleepingz
disk-sleepstoppedztracing-stopZzombieZdeadz	wake-killZwakingZidlelockedZwaitingZ	suspendedZparkedZESTABLISHEDZSYN_SENTZSYN_RECVZ	FIN_WAIT1Z	FIN_WAIT2Z	TIME_WAITZCLOSEZ
CLOSE_WAITZLAST_ACKZLISTENZCLOSINGNONE      c                   @   s   e Zd ZdZdZdZdS )	NicDuplexrg   rh   r   N)__name__
__module____qualname__r"   r#   r$    rm   rm   [/nfs/NAS7/SABIOD/METHODE/ermites/ermites_venv/lib/python3.9/site-packages/psutil/_common.pyri      s   ri   c                   @   s   e Zd ZdZdZdS )BatteryTimero   rp   N)rj   rk   rl   POWER_TIME_UNKNOWNPOWER_TIME_UNLIMITEDrm   rm   rm   rn   rq      s   rq   replacesurrogateescaperF   )totalusedfreepercentsinZsoutrB   )rv   rw   rx   ry   r@   )
read_countwrite_count
read_byteswrite_bytesZ	read_timeZ
write_timerA   )ZdeviceZ
mountpointZfstypeoptsZmaxfileZmaxpathrC   )Z
bytes_sentZ
bytes_recvZpackets_sentZpackets_recvZerrinZerroutZdropinZdropoutrG   )nameZterminalhoststartedpidr>   )fdfamilytypeladdrraddrstatusr   rD   )r   addressnetmask	broadcastZptprE   )ZisupZduplexspeedZmtuflagsr?   )Zctx_switchesZ
interruptsZsoft_interruptsZsyscallsscpufreq)currentminmaxshwtemp)labelr   highcriticalsbattery)ry   ZsecsleftZpower_pluggedsfanr   r   r6   )usersystemchildren_userchildren_systemr;   pathr   r<   )idZ	user_timeZsystem_timer=   )realZ	effectiveZsavedr8   r9   )r{   r|   r}   r~   r:   Zioclassvaluer7   Z	voluntaryZinvoluntaryr5   )r   r   r   r   r   r   addripport)allZtcpZtcp4ZudpZudp4ZinetZinet4Zinet6)Ztcp6Zudp6unixc                   @   s,   e Zd ZdZdZdd Zdd Zdd Zd	S )
ErrorzQBase exception class. All other psutil exceptions inherit
    from this one.
    psutilc                 C   sH   t  }|D ]6}t| |d }|r*|||< q|dkr|dkr|||< q|S )Nr   r   )collectionsOrderedDictgetattr)selfattrsinfor   r   rm   rm   rn   	_infodict%  s    

zError._infodictc                 C   sP   |  d}|r,dddd | D  }nd }ddd t| dd	|fD S )
N)r   ppidr   z(%s), c                 S   s   g | ]\}}d ||f qS z%s=%rrm   .0kvrm   rm   rn   
<listcomp>4      z!Error.__str__.<locals>.<listcomp> c                 S   s   g | ]}|r|qS rm   rm   )r   xrm   rm   rn   r   8  r   msg )r   joinitemsr   r   r   detailsrm   rm   rn   __str__/  s    
zError.__str__c                 C   s2   |  d}ddd | D }d| jj|f S )N)r   r   r   secondsr   r   c                 S   s   g | ]\}}d ||f qS r   rm   r   rm   rm   rn   r   =  r   z"Error.__repr__.<locals>.<listcomp>zpsutil.%s(%s))r   r   r   	__class__rj   r   rm   rm   rn   __repr__:  s    
zError.__repr__N)rj   rk   rl   __doc__r   r   r   rm   rm   rm   rn   r     s
   
r   c                   @   s   e Zd ZdZdZdddZdS )NoSuchProcesszXException raised when a process with a certain PID doesn't
    or no longer exists.
    r   Nc                 C   s$   t |  || _|| _|pd| _d S )Nzprocess no longer existsr   __init__r   r   r   r   r   r   r   rm   rm   rn   r   H  s    
zNoSuchProcess.__init__)NNrj   rk   rl   r   r   rm   rm   rm   rn   r   A  s   r   c                   @   s   e Zd ZdZdZdddZdS )ZombieProcessa1  Exception raised when querying a zombie process. This is
    raised on macOS, BSD and Solaris only, and not always: depending
    on the query the OS may be able to succeed anyway.
    On Linux all zombie processes are querable (hence this is never
    raised). Windows doesn't have zombie processes.
    r   Nc                 C   s$   t | ||| || _|pd| _d S )Nz"PID still exists but it's a zombie)r   r   r   r   )r   r   r   r   r   rm   rm   rn   r   Y  s    zZombieProcess.__init__)NNNr   rm   rm   rm   rn   r   O  s   r   c                   @   s   e Zd ZdZdZdddZdS )AccessDeniedz@Exception raised when permission to perform an action is denied.r   Nc                 C   s$   t |  || _|| _|pd| _d S )Nr   r   r   rm   rm   rn   r   d  s    
zAccessDenied.__init__)NNNr   rm   rm   rm   rn   r   _  s   r   c                   @   s   e Zd ZdZdZdddZdS )TimeoutExpiredzWRaised on Process.wait(timeout) if timeout expires and process
    is still alive.
    r   Nc                 C   s*   t |  || _|| _|| _d| | _d S )Nztimeout after %s seconds)r   r   r   r   r   r   )r   r   r   r   rm   rm   rn   r   r  s
    
zTimeoutExpired.__init__)NNr   rm   rm   rm   rn   r   k  s   r   execzvdef raise_from(value, from_value):
    try:
        raise value from from_value
    finally:
        value = None
    c                 C   s   | d S Nrm   )r   
from_valuerm   rm   rn   
raise_from  s    r   c                 C   sD   zt | | d }W n ty(   Y dS 0 |dur<t||}|S dS )z5Calculate percentage usage of 'used' against 'total'.d   g        N)floatZeroDivisionErrorround)rw   rv   Zround_retrm   rm   rn   rN     s    
rN   c                    s2   t  fdd} fdd}i  ||_|S )a  A simple memoize decorator for functions supporting (hashable)
    positional arguments.
    It also provides a cache_clear() function for clearing the cache:

    >>> @memoize
    ... def foo()
    ...     return 1
        ...
    >>> foo()
    1
    >>> foo.cache_clear()
    >>>

    It supports:
     - functions
     - classes (acts as a @singleton)
     - staticmethods
     - classmethods

    It does NOT support:
     - methods
    c                     s   | t t| f}z
 | W S  ty~   z| i | } |< W n. tyt } zt|d W Y d }~n
d }~0 0 | Y S 0 d S r   )	frozensetsortedr   KeyError	Exceptionr   )argskwargskeyr   errcachefunrm   rn   wrapper  s    
 zmemoize.<locals>.wrapperc                      s       dS )zClear cache.N)clearrm   )r   rm   rn   cache_clear  s    zmemoize.<locals>.cache_clear)	functoolswrapsr   )r   r   r   rm   r   rn   rK     s    rK   c                    s6   t   fdd}dd }dd }||_||_|S )a  A memoize decorator which is disabled by default. It can be
    activated and deactivated on request.
    For efficiency reasons it can be used only against class methods
    accepting no arguments.

    >>> class Foo:
    ...     @memoize
    ...     def foo()
    ...         print(1)
    ...
    >>> f = Foo()
    >>> # deactivated (default)
    >>> foo()
    1
    >>> foo()
    1
    >>>
    >>> # activated
    >>> foo.cache_activate(self)
    >>> foo()
    1
    >>> foo()
    >>> foo()
    >>>
    c                    s   z| j   }W n ty^   z | W  Y S  tyX } zt|d W Y d }~n
d }~0 0 Y np ty   z | }W n. ty } zt|d W Y d }~n
d }~0 0 z|| j  < W n ty   Y n0 Y n0 |S r   )_cacheAttributeErrorr   r   r   )r   r   r   r   rm   rn   r     s"    $ z'memoize_when_activated.<locals>.wrapperc                 S   s
   i | _ dS )zsActivate cache. Expects a Process instance. Cache will be
        stored as a "_cache" instance attribute.
        N)r   procrm   rm   rn   cache_activate  s    z.memoize_when_activated.<locals>.cache_activatec                 S   s    z| ` W n ty   Y n0 dS )zDeactivate and clear cache.N)r   r   r   rm   rm   rn   cache_deactivate  s    z0memoize_when_activated.<locals>.cache_deactivate)r   r   r   r   )r   r   r   r   rm   r   rn   memoize_when_activated  s    r   c              
   C   sZ   zt | }W n: tyH } z"|jtjtjfv r2 W Y d}~dS d}~0 0 t|jS dS )zSame as os.path.isfile() but does not swallow EACCES / EPERM
    exceptions, see:
    http://mail.python.org/pipermail/python-dev/2012-June/120787.html.
    NF)osstatOSErrorerrnoEPERMEACCESS_ISREGst_mode)r   str   rm   rm   rn   rJ     s    rJ   c              
   C   sR   zt |  W n: tyH } z"|jtjtjfv r2 W Y d}~dS d}~0 0 dS dS )zSame as os.path.exists() but does not swallow EACCES / EPERM
    exceptions. See:
    http://mail.python.org/pipermail/python-dev/2012-June/120787.html.
    NFT)r   r   r   r   r   r   )r   r   rm   rm   rn   rM   "  s    rM   c                  C   sv   t jrtdu rdS zHt  tt j} t|  | d W d   n1 sL0    Y  W dS  t jyp   Y dS 0 dS )z2Return True if IPv6 is supported on this platform.NF)z::1r   T)sockethas_ipv6r   r   
contextlibclosingbinderror)sockrm   rm   rn   rO   1  s    (rO   c                 C   sv   i }d}t }| d|}||kr"qr| d||}||krh| || }| |d | }|r`| }|||< |d }q|S )zCParse a C environ block of environment variables into a dictionary.r    =rh   )r   findupper)datar   posZWINDOWS_Znext_posZ	equal_posr   r   rm   rm   rn   rL   ?  s    
rL   c                 C   s4   t du r| S zt| W S  ty.   |  Y S 0 dS )zConvert a numeric socket family value to an IntEnum member.
    If it's not a known member, return the numeric value itself.
    N)enumr   AddressFamily
ValueErrornumrm   rm   rn   rP   [  s    rP   c                 C   s4   t du r| S zt| W S  ty.   |  Y S 0 dS )zConvert a numeric socket type value to an IntEnum member.
    If it's not a known member, return the numeric value itself.
    N)r  r   
SocketKindr  r  rm   rm   rn   rQ   h  s    rQ   c                 C   s   |t jtfv r&|rt| }|r&t| }|t jkrJ|ttfv rJ||t}nt}t|}t|}|du rxt	| |||||S t
| ||||||S dS )z2Convert a raw connection tuple to a proper ntuple.N)r   r   r   r   r   getr   rP   rQ   r5   r>   )r   Zfamtype_r   r   r   Z
status_mapr   rm   rm   rn   rX   u  s    rX   c                    s    fdd}|S )zA decorator which can be used to mark a method as deprecated
    'replcement' is the method name which will be called instead.
    c                    s:   d| j f  | jd u r | _t|  fdd}|S )Nz8%s() is deprecated and will be removed; use %s() insteadc                    s$   t j tdd t| |i |S )Nrg   )category
stacklevel)warningswarnDeprecationWarningr   )r   r   r   )r   replacementrm   rn   inner  s    z/deprecated_method.<locals>.outer.<locals>.inner)rj   r   r   r   )r   r  r  )r   rn   outer  s    
z deprecated_method.<locals>.outerrm   )r  r  rm   r  rn   rI     s    rI   c                   @   sB   e Zd ZdZdd Zdd Zdd Zdd	 ZdddZdd Z	d
S )_WrapNumberszNWatches numbers so that they don't overflow and wrap
    (reset to zero).
    c                 C   s    t  | _i | _i | _i | _d S r   )	threadingLocklockr   	remindersreminder_keysr   rm   rm   rn   r     s    
z_WrapNumbers.__init__c                 C   sX   || j vsJ || jvsJ || jvs*J || j |< tt| j|< tt| j|< d S r   )r   r  r  r   defaultdictintset)r   
input_dictr   rm   rm   rn   	_add_dict  s    
z_WrapNumbers._add_dictc                 C   s\   | j | }t| t|  }|D ]0}| j| | D ]}| j| |= q8| j| |= q&dS )zIn case the number of keys changed between calls (e.g. a
        disk disappears) this removes the entry from self.reminders.
        N)r   r  keysr  r  )r   r  r   old_dictZ	gone_keysZgone_keyremkeyrm   rm   rn   _remove_dead_reminders  s    
z#_WrapNumbers._remove_dead_remindersc              	   C   s  || j vr| || |S | || | j | }i }|D ]}|| }z|| }W n tyn   |||< Y q8Y n0 g }tt|D ]f}	||	 }
||	 }||	f}|
|k r| j| |  |7  < | j| | | |	|
| j| |   qt
|||< q8|| j |< |S )zlCache dict and sum numbers which overflow and wrap.
        Return an updated copy of `input_dict`.
        )r   r   r$  r   rangelenr  r  addappendtuple)r   r  r   r"  Znew_dictr   Zinput_tupleZ	old_tuplebitsiZinput_value	old_valuer#  rm   rm   rn   run  s2    



z_WrapNumbers.runNc                 C   s|   | j b |du r0| j  | j  | j  n*| j|d | j|d | j|d W d   n1 sn0    Y  dS )z>Clear the internal cache, optionally only for function 'name'.N)r  r   r   r  r  pop)r   r   rm   rm   rn   r     s    

z_WrapNumbers.cache_clearc                 C   s:   | j   | j| j| jfW  d   S 1 s,0    Y  dS )z5Return internal cache dicts as a tuple of 3 elements.N)r  r   r  r  r  rm   rm   rn   
cache_info  s    z_WrapNumbers.cache_info)N)
rj   rk   rl   r   r   r   r$  r-  r   r/  rm   rm   rm   rn   r    s   '
r  c                 C   s6   t j t | |W  d   S 1 s(0    Y  dS )zGiven an `input_dict` and a function `name`, adjust the numbers
    which "wrap" (restart from zero) across different calls by adding
    "old value" to "new value" and return an updated dict.
    N)_wnr  r-  )r  r   rm   rm   rn   rR     s    rR   i   c                 C   s   t | dtdS )Nrb	buffering)openFILE_READ_BUFFER_SIZE)fnamerm   rm   rn   rT     s    rT   c                 C   s\   t st| tdS t| tttd}z
t|_W n, ty<   Y n tyV   |   Y n0 |S )zOn Python 3 opens a file in text mode by using fs encoding and
    a proper en/decoding errors handler.
    On Python 2 this is just an alias for open(name, 'rt').
    r2  )r3  encodingerrors)	PY3r4  r5  r3   r4   _CHUNK_SIZEr   r   close)r6  Zfobjrm   rm   rn   rS     s     
rS   c              	   C   s   |t u r:|| }| W  d   S 1 s.0    Y  nRz6|| }| W  d   W S 1 sd0    Y  W n ttfy   | Y S 0 dS )zRead entire file content and return it as a string. File is
    opened in text mode. If specified, `fallback` is the value
    returned in case of error, either if the file does not exist or
    it can't be read().
    N)_DEFAULTreadIOErrorr   )r6  fallback_openfrm   rm   rn   rU   5  s    
(
,rU   c                 C   s   t | |tdS )z,Same as above but opens file in binary mode.)r?  r@  )rU   rT   )r6  r?  rm   rm   rn   rV   F  s    rV   %(value).1f%(symbol)sc                 C   s   d}i }t |dd D ]\}}d|d d > ||< qt|dd D ]2}t| || krFt| ||  }|t    S qF|t|d | d S )zUsed by various scripts. See: http://goo.gl/zeJZl.

    >>> bytes2human(10000)
    '9.8K'
    >>> bytes2human(100001221)
    '95.4M'
    )	BKMGTPEZYrh   N
   r   )symbolr   )	enumeratereversedabsr   localsdict)nformatsymbolsprefixr+  srM  r   rm   rm   rn   rW   K  s    rW   c                   C   s   t jd jS )z+Return updated psutil.PROCFS_PATH constant.r   )sysmodulesZPROCFS_PATHrm   rm   rm   rn   get_procfs_path^  s    rZ  c                 C   s   | j ttdS )N)r7  r8  )decoder3   r4   rW  rm   rm   rn   r[  e  s    r[  c                 C   s   | S r   rm   r\  rm   rm   rn   r[  j  s    c                 C   s^   t jdkrdS z2dd l}|  s$J |  |ddks>J W n tyT   Y dS 0 dS d S )Nr^   Tr   colorsF)r   r   cursesisattyZ	setuptermZtigetnumr   )filer^  rm   rm   rn   r[   s  s    
r[   Fc                 C   s   t  s
| S g }tddddddddd	d
	}d|d< z|| }W n& tyb   tdt|  Y n0 || |r||d dd|| f S )z*Return an highlighted version of 'string'.Z34Z33Z30Z32Z37Z36Z91Z35Z93)	ZbluebrownZdarkgreygreenZgreyZ	lightblueredZvioletyellowZ29Nz#invalid color %r; choose between %s1z[%sm%s[0m;)r[   rR  r   r  listr!  r(  r   )rW  colorboldattrr]  rm   rm   rn   rZ     s2    


rZ   c              	   C   s
  t  st| |d ntr.tt| |||d nddl}d}|jjj}|jjj}t	ddddd}||d< z|| }W n* t
y   td	|t| f Y n0 |r|dkr|d
7 }|tju rdnd}	|j|_||	}
||
| zt| |d W ||
| n||
| 0 dS )z$Print a colorized version of string.r`  r   N   rg         )rb  rc  ra  rd  z#invalid color %r; choose between %r   ii)r[   printr   rZ   ctypeswindllKernel32GetStdHandleSetConsoleTextAttributerR  r   r  rg  r!  rX  stderrc_ulongrestype)rW  rh  ri  r`  rq  ZDEFAULT_COLORrt  ru  r]  Z	handle_idhandlerm   rm   rn   r\     s8    


r\   c                 C   sn   t rjddl}|| j\}}}}}t| trRt| ttt	frJd|  } nd|  } t
d||| f tjd dS )z@If PSUTIL_DEBUG env var is set, print a debug message to stderr.r   Nzignoring %szignoring %rzpsutil-debug [%s:%s]> %srk  )r   inspectgetframeinfocurrentframef_back
isinstancer   r   r>  EnvironmentErrorrp  rX  rv  )r   rz  r6  lineno_linesindexrm   rm   rn   rY     s    

rY   )N)N)rB  )NF)r   
__future__r   r   r   r   r   r   r   r   r   rX  r  r  r   r   r   r   r   ImportErrorr	   version_infor9  r  boolgetenvr   objectr<  __all__r   r   r   platform
startswithr   r   r   r   r   r   r   r   ZAIXr)   r*   r&   r+   r-   r1   r%   r/   r0   r'   r(   r.   r,   r2   r   r    r   r   r   r!   r   r   r   r   r   r   r"   r#   r$   IntEnumri   globalsupdate__members__rr   rs   rq   getfilesystemencodingr3   r4   getfilesystemencodeerrorsr   rF   rB   r@   rA   rC   rG   r>   rD   rE   r?   r   r   r   r   r6   r;   r<   r=   r8   r9   r:   r7   r5   r   rH   r   r   r   r   r   r   r~  __builtins__rR  exec_r   r   rN   rK   r   rJ   rM   rO   rL   rP   rQ   rX   rI   r  rR   r0  r   r/  r5  rT   rS   rU   rV   rW   rZ  r[  stdoutr[   rZ   r\   rY   rm   rm   rm   rn   <module>   sp  


&

	

	





#



-G

W	

	

'