U
    +-eL                     @   s  d 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 ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z  ddlm!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 nj e'k
r Z( zJe)e(* +dre, d d k rd!Z-e-d"7 Z-e-d#7 Z-e.e-n W 5 dZ([(X Y nX er ddl/Z/ndZ/d$d%d&d'd(d)d*d+d,d-d.d/d0d1gZ0d2Z1d3Z2d4ej3kZ4e/dkrFd5Z5ne/6d6d1d5iZ7e7j5Z5e&j8ej9e&j:ej;e&j<ej=e&j>ej?e&j@ejAe&jBejCe&jDejEe&jFejGe&jHejIe&jJejKe&jLejMe&jNe1e&jOejPiZQe/dk	rG d7d8 d8e/j6ZReS TeRjU e/dkrdZVdZWd9ZXd:ZYn G d;d< d<e/j6ZZeS TeZjU e[ddd9d:d=d>d d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNZ\e	dOdPdQdRdSdTgZ]e	dUdVdWdXdYdZgZ^e	d[d\d]d^d_d`dadbdcdddedfdggZ_e	dhe_j`di Zae	djdkd\gZbe	dldmdncebj` Zde	dodpdqdrdsdtdugZeedvdwdxdy Zfdzd{ Zged|d} Zhd~d Zidd Zje&jkZkdd Zldd Zmdd Zndd Zodd Zpdd Zqdd Zrdd Zsdatdd ZudddZvdd Zwdd Zxdd Zydd Zzda{dd Z|dd Z}dd$ Z~dd% ZG dd dZe&jZe&jZe&jZdd ZdddZdd Zdd ZG dd dZdS )z Windows platform implementation.    N)
namedtuple   )_common)ENCODING)ENCODING_ERRS)AccessDenied)NoSuchProcess)TimeoutExpired)	conn_tmap)conn_to_ntuple)debug)isfile_strict)memoize)memoize_when_activated)parse_environ_block)usage_percent)PY3)long)	lru_cacherange)unicode)ABOVE_NORMAL_PRIORITY_CLASS)BELOW_NORMAL_PRIORITY_CLASS)HIGH_PRIORITY_CLASS)IDLE_PRIORITY_CLASS)NORMAL_PRIORITY_CLASS)REALTIME_PRIORITY_CLASS)_psutil_windowszdll load failed   z3this Windows version is too old (< Windows Vista); z:psutil 3.4.2 is the latest version which supports Windows z2000, XP and 2003 serverwin_service_iterwin_service_getr   r   r   r   r   r   IOPRIO_VERYLOW
IOPRIO_LOWIOPRIO_NORMALIOPRIO_HIGHCONN_DELETE_TCBAF_LINKZ
DELETE_TCBi+  Z__pypy__AddressFamilyc                   @   s$   e Zd ZeZeZeZeZeZeZdS )PriorityN)	__name__
__module____qualname__r   r   r   r   r   r    r.   r.   R/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/psutil/_pswindows.pyr*   n   s   r*         c                   @   s   e Zd ZdZdZdZdZdS )
IOPriorityr   r   r0   r1   N)r+   r,   r-   r"   r#   r$   r%   r.   r.   r.   r/   r2   ~   s   r2               	   
                                    )num_handlesctx_switches	user_timekernel_timecreate_timenum_threads	io_rcount	io_wcount	io_rbytes	io_wbytesio_count_othersio_bytes_othersnum_page_faults	peak_wsetwsetpeak_paged_pool
paged_poolpeak_non_paged_poolnon_paged_poolpagefilepeak_pagefilemem_private	scputimesusersystemidle	interruptdpcsvmemtotal	availablepercentusedfreepmemrssvmsrP   rQ   rR   rS   rT   Zpeak_nonpaged_poolZnonpaged_poolrW   rX   privatepfullmem)usspmmap_groupedpath	pmmap_extzaddr perms  pioZ
read_countZwrite_count
read_byteswrite_bytesother_countZother_bytesi   )maxsizec                 C   s@   d | ddd }t|}| t|d }tj ||S )zConvert paths using native DOS format like:
        "\Device\HarddiskVolume1\Windows\systemew\file.txt"
    into:
        "C:\Windows\systemew\file.txt".
    \Nr1   )joinsplitcextZQueryDosDevicelenosrm   )sZrawdriveZdriveletter	remainderr.   r.   r/   convert_dos_path   s    
r}   c                 C   s&   t r| S t| tr| S | ttS dS )zmEncode a unicode string to a byte string by using the default fs
    encoding + "replace" error handler.
    N)r   
isinstancestrencoder   r   )r{   r.   r.   r/   py2_strencode   s
    
r   c                   C   s   t  S N)rx   getpagesizer.   r.   r.   r/   r      s    r   c            
      C   sJ   t  } | \}}}}|}|}|}|| }t|| |dd}	t|||	||S )z&System virtual memory as a namedtuple.r   Zround_)rx   virtual_memr   r`   )
memZtotphysZ	availphysZtotsysZavailsysra   Zavailre   rd   rc   r.   r.   r/   virtual_memory   s    r   c                  C   sp   t  } | d }| d }|| }|dkrBt  }td| | }nd}d}|| }t|d}t||||ddS )z=Swap system memory as a (total, used, free, sin, sout) tuple.r   r0   g{Gz?        r   )rx   r   Zswap_percentintroundr   Zsswap)r   Z
total_physZtotal_systemra   Zpercentswaprd   re   rc   r.   r.   r/   swap_memory   s    
r   c                 C   sP   t rt| tr| jtdd} t| \}}|| }t||dd}t	||||S )z'Return disk usage associated with path.strict)errorsr   r   )
r   r~   bytesdecoder   rx   
disk_usager   r   Z
sdiskusage)rm   ra   re   rd   rc   r.   r.   r/   r     s    r   c                 C   s   t | }dd |D S )zReturn disk partitions.c                 S   s   g | ]}t j| qS r.   )r   Z	sdiskpart.0xr.   r.   r/   
<listcomp>#  s     z#disk_partitions.<locals>.<listcomp>)rx   disk_partitions)allrawlistr.   r.   r/   r      s    
r   c                  C   s<   t  \} }}tdd tt   D  }t| |||j|jS )z)Return system CPU times as a named tuple.c                 S   s   g | ]}t |qS r.   )sum)r   nr.   r.   r/   r   1  s     zcpu_times.<locals>.<listcomp>)rx   	cpu_timesrZ   zipper_cpu_timesr^   r_   )r[   r\   r]   Zpercpu_summedr.   r.   r/   r   +  s     r   c                  C   s:   g } t  D ](\}}}}}t|||||}| | q| S )z6Return system per-CPU times as a list of named tuples.)rx   r   rZ   append)retr[   r\   r]   r^   r_   itemr.   r.   r/   r   6  s
    r   c                   C   s   t  S )z0Return the number of logical CPUs in the system.)rx   cpu_count_logicalr.   r.   r.   r/   r   ?  s    r   c                   C   s   t  S )z-Return the number of CPU cores in the system.)rx   cpu_count_coresr.   r.   r.   r/   r   D  s    r   c                  C   s$   t  \} }}}d}t| |||S )zReturn CPU statistics.r   )rx   	cpu_statsr   Z	scpustats)rE   Z
interruptsZdpcsZsyscallsZsoft_interruptsr.   r.   r/   r   I  s
    
r   c                  C   s(   t  \} }d}tt| |t|gS )zMReturn CPU frequency.
    On Windows per-cpu frequency is not supported.
    r   )rx   cpu_freqr   Zscpufreqfloat)currZmax_Zmin_r.   r.   r/   r   Q  s    r   Fc                  C   s*   t st  da t } tdd | D S )zReturn the number of processes in the system run queue averaged
    over the last 1, 5, and 15 minutes respectively as a tuple.
    Tc                 S   s   g | ]}t |d qS )r0   )r   )r   loadr.   r.   r/   r   i  s     zgetloadavg.<locals>.<listcomp>)_loadavg_inititializedrx   Zinit_loadavg_counter
getloadavgtuple)Z	raw_loadsr.   r.   r/   r   ]  s
    r   c                 C   s   | t kr(td| ddd t D f t |  \}}t|||}t }|D ]D}|\}}}	}
}}}t|||	|
||t|dkr~|ndd}|| qLt	|S )zReturn socket connections.  If pid == -1 return system-wide
    connections (as opposed to connections opened by one process only).
    z+invalid %r kind argument; choose between %sz, c                 S   s   g | ]}t |qS r.   )reprr   r.   r.   r/   r   w  s     z#net_connections.<locals>.<listcomp>r(   N)pid)
r
   
ValueErrorrv   rx   net_connectionssetr   TCP_STATUSESaddlist)kind_pidZfamiliestypesr   r   r   fdfamtypeladdrraddrstatusr   ntr.   r.   r/   r   q  s    r   c                  C   sz   i } t  }| D ]`\}}ts>t|ts6tt|t|}|\}}}}t	t
dr^t
|}t
||||d| |< q| S )z)Get NIC stats (isup, duplex, speed, mtu).	NicDuplex )rx   net_if_statsitemsr   r~   r   AssertionErrorr   r   hasattrr   r   Z	snicstats)r   Zrawdictnamer   ZisupZduplexspeedZmtur.   r.   r/   r     s    

r   c                  C   s   t  } tdd |  D S )zsReturn network I/O statistics for every network interface
    installed on the system as a dict of raw tuples.
    c                 S   s   g | ]\}}t ||fqS r.   r   )r   kvr.   r.   r/   r     s     z#net_io_counters.<locals>.<listcomp>)rx   net_io_countersdictr   r   r.   r.   r/   r     s    r   c                  C   s8   g } t  D ]&}t|}t|d |d< | | q| S )z,Return the addresses associated to each NIC.r   )rx   net_if_addrsr   r   r   )r   r   r.   r.   r/   r     s    r   c                  C   sd   t  \} }}}| dk}t|d@ }t|d@ }|r8dS |s@|rHtj}n|dkrVtj}t|||S )zReturn battery information.r      r6   Nr(   )rx   sensors_batteryboolr   ZPOWER_TIME_UNLIMITEDZPOWER_TIME_UNKNOWNZsbattery)Zacline_statusflagsrc   ZsecsleftZpower_pluggedZ
no_batteryZchargingr.   r.   r/   r     s    r   c                  C   s,   t t } t| t dkr tS | a| S dS )z:The system boot time expressed in seconds since the epoch.r   N)r   rx   	boot_timeabs_last_btimer   r.   r.   r/   r     s
    r   c                  C   sH   g } t  }|D ]2}|\}}}t|}t|d||d}| | q| S )z:Return currently connected users as a list of namedtuples.N)rx   usersr   r   Zsuserr   )retlistr   r   r[   hostnameZtstampr   r.   r.   r/   r     s    
r   c                  c   s*   t  D ]\} }tt| t|V  qdS )z*Yields a list of WindowsService instances.N)rx   Zwinservice_enumerateWindowsServicer   )r   display_namer.   r.   r/   r      s    c                 C   s   t | d}| d |_|S )zBOpen a Windows service and return it as a WindowsService instance.Nr   )r   _query_config_display_name)r   Zservicer.   r.   r/   r!     s    
c                   @   s   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
ej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 d! Zd"d# Zd$S )%r   z(Represents an installed Windows service.c                 C   s   || _ || _d S r   )_namer   )selfr   r   r.   r.   r/   __init__  s    zWindowsService.__init__c                 C   s    d| j | jf }d| jj|f S )Nz(name=%r, display_name=%r)z%s%s)r   r   	__class__r+   )r   detailsr.   r.   r/   __str__  s
     zWindowsService.__str__c                 C   s   d|   t| f S )Nz
<%s at %s>)r   idr   r.   r.   r/   __repr__  s    zWindowsService.__repr__c                 C   s   t |tstS | j|jkS r   )r~   r   NotImplementedr   r   otherr.   r.   r/   __eq__   s    
zWindowsService.__eq__c                 C   s
   | |k S r   r.   r   r.   r.   r/   __ne__  s    zWindowsService.__ne__c              	   C   sH   |    t| j\}}}}W 5 Q R X tt|t|t|t|dS )N)r   binpathusername
start_type)_wrap_exceptionsrx   Zwinservice_query_configr   r   r   )r   r   r   r   r   r.   r.   r/   r   
  s    

zWindowsService._query_configc              	   C   s<   |    t| j\}}W 5 Q R X |dkr0d }t||dS )Nr   )r   r   )r   rx   Zwinservice_query_statusr   r   )r   r   r   r.   r.   r/   _query_status  s
    
zWindowsService._query_statusc              
   c   s~   z
dV  W nn t k
rx } zPt|r<td| jd| j dn,|jtjtjfkrftd| jd| j dn W 5 d}~X Y nX dS )z{Ctx manager which translates bare OSError and WindowsError
        exceptions into NoSuchProcess and AccessDenied.
        Nz2service %r is not querable (not enough privileges)r   r   msgzservice %r does not exist))	OSErroris_permission_errr   r   winerrorrx   ZERROR_INVALID_NAMEZERROR_SERVICE_DOES_NOT_EXISTr   r   errr.   r.   r/   r     s(    
  zWindowsService._wrap_exceptionsc                 C   s   | j S )zThe service name. This string is how a service is referenced
        and can be passed to win_service_get() to get a new
        WindowsService instance.
        )r   r   r.   r.   r/   r   3  s    zWindowsService.namec                 C   s   | j S )z_The service display name. The value is cached when this class
        is instantiated.
        )r   r   r.   r.   r/   r   :  s    zWindowsService.display_namec                 C   s   |   d S )zwThe fully qualified path to the service binary/exe file as
        a string, including command line arguments.
        r   r   r   r.   r.   r/   r   @  s    zWindowsService.binpathc                 C   s   |   d S )z,The name of the user that owns this service.r   r   r   r.   r.   r/   r   F  s    zWindowsService.usernamec                 C   s   |   d S )zRA string which can either be "automatic", "manual" or
        "disabled".
        r   r   r   r.   r.   r/   r   J  s    zWindowsService.start_typec                 C   s   |   d S )zzThe process PID, if any, else None. This can be passed
        to Process class to control the service's process.
        r   r   r   r.   r.   r/   r   R  s    zWindowsService.pidc                 C   s   |   d S )zService status as a string.r   r   r   r.   r.   r/   r   X  s    zWindowsService.statusc                 C   s   t t|  S )zService long description.)r   rx   Zwinservice_query_descrr   r   r.   r.   r/   description\  s    zWindowsService.descriptionc                 C   s>   |   }||   |  |d< |  |d< |  |d< |S )zUUtility method retrieving all the information above as a
        dictionary.
        r   r   r   )r   updater   r   r   r   )r   dr.   r.   r/   as_dictb  s    zWindowsService.as_dictN)r+   r,   r-   __doc__r   r   r   r   r   r   r   
contextlibcontextmanagerr   r   r   r   r   r   r   r   r   r   r.   r.   r.   r/   r     s&   
r   c                 C   s<   t | tst| | jtjtjfkp:t| ddtjtj	fkS )z*Return True if this is a permission error.r   r(   )
r~   r   r   errnoEPERMEACCESgetattrrx   ZERROR_ACCESS_DENIEDZERROR_PRIVILEGE_NOT_HELD)excr.   r.   r/   r     s    r   c                 C   sF   t | tst| t| r&t||dS | jtjkr>t||dS | dS )z3Convert OSError into NoSuchProcess or AccessDenied.r   r   N)r~   r   r   r   r   r   ZESRCHr   )r   r   r   r.   r.   r/   convert_oserror  s    r  c                    s   t   fdd}|S )zDDecorator which converts OSError into NoSuchProcess or AccessDenied.c              
      sL   z | f||W S  t k
rF } zt|| j| jdW 5 d }~X Y nX d S )Nr  )r   r  r   r   )r   argskwargsr   funr.   r/   wrapper  s    z wrap_exceptions.<locals>.wrapper	functoolswrapsr  r  r.   r  r/   wrap_exceptions  s    r  c                    s   t   fdd}|S )zWorkaround for https://github.com/giampaolo/psutil/issues/875.
    See: https://stackoverflow.com/questions/4457745#4457745.
    c                    s   d}d}t |D ]p}z | f||W   S  tk
r~ } z6|}|jtkrlt| t|d d}W Y 
qn W 5 d }~X Y qX qd ||}t| j	| j
|dd S )N-C6?!   r0   {Gz?zI{} retried {} times, converted to AccessDenied as it's still returning {}r   )r   WindowsErrorr   ERROR_PARTIAL_COPYtimesleepminformatr   r   r   )r   r  r  delaytimes_r   r   r  r.   r/   r    s&    


  z)retry_error_partial_copy.<locals>.wrapperr  r  r.   r  r/   retry_error_partial_copy  s    r  c                   @   s  e Zd ZdZddddgZdd Zdd	 Zd
d Zedd Z	dd Z
eedd Zeedd Zeedd Zdd Zdd Zedd Zedd Zdd Zed d! Zed"d# ZedPd%d&Zed'd( Zed)d* Zed+d, Zed-d. Zed/d0 Zed1d2 Zed3d4 Zeed5d6 Zed7d8 Z edQd:d;Z!ed<d= Z"ed>d? Z#ed@dA Z$edBdC Z%edDdE Z&edFdG Z'edHdI Z(edJdK Z)edLdM Z*edNdO Z+d$S )RProcessz1Wrapper class around underlying C implementation.r   r   _ppid_cachec                 C   s   || _ d | _d | _d S r   )r   r   r  )r   r   r.   r.   r/   r     s    zProcess.__init__c                 C   s   | j |  | j|  d S r   )
_proc_infoZcache_activateexer   r.   r.   r/   oneshot_enter  s    zProcess.oneshot_enterc                 C   s   | j |  | j|  d S r   )r  Zcache_deactivater  r   r.   r.   r/   oneshot_exit  s    zProcess.oneshot_exitc                 C   s$   t | j}t|ttks t|S )zOReturn multiple information about this process as a
        raw tuple.
        )rx   Z	proc_infor   ry   	pinfo_mapr   r   r   r.   r.   r/   r    s    zProcess._proc_infoc                 C   s,   | j dkrdS | j dkrdS tj|  S )zbReturn process name, which on Windows is always the final
        part of the executable.
        r   zSystem Idle Processr3   System)r   rz   rm   basenamer  r   r.   r.   r/   r     s
    

zProcess.namec              
   C   s   t r`zt| j}W ql tk
r\ } z*|jdkrJtd|  t| j| j W 5 d }~X Y qlX nt| j}t	sxt
|}|drt|S |S )N   z%r translated into AccessDeniedru   )PYPYrx   Zproc_exer   r  r   r   r   r   r   r   
startswithr}   )r   r  r   r.   r.   r/   r    s    

zProcess.exec              
   C   s   t jt jkrbzt j| jdd}W qr tk
r^ } z t|rLt j| jdd}n W 5 d }~X Y qrX nt j| jdd}trz|S dd |D S d S )NT)Zuse_pebFc                 S   s   g | ]}t |qS r.   r   )r   r{   r.   r.   r/   r   +  s     z#Process.cmdline.<locals>.<listcomp>)rx   ZWINVERZWINDOWS_8_1Zproc_cmdliner   r   r   r   )r   r   r   r.   r.   r/   cmdline  s    zProcess.cmdlinec                 C   s6   t | j}|r*ts*t|ts*tt|tt	|S r   )
rx   Zproc_environr   r   r~   r   r   r   r   r   )r   Zustrr.   r.   r/   environ-  s    zProcess.environc                 C   s6   zt  | j W S  tk
r0   t| j| jY nX d S r   )ppid_mapr   KeyErrorr   r   r   r.   r.   r/   ppid5  s    zProcess.ppidc                 C   s   zt | jW S  tk
r } zt|r|  }|td  |td  |td  |td  |td  |td  |td  |td  |td	  |td
  f
 W Y S  W 5 d }~X Y nX d S )NrP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   )rx   Zproc_memory_infor   r   r   r  r!  )r   r   infor.   r.   r/   _get_raw_meminfo;  s"    









zProcess._get_raw_meminfoc                 C   s(   |   }|d }|d }t||f|  S )Nr0   r5   )r.  rf   )r   trg   rh   r.   r.   r/   memory_infoQ  s    zProcess.memory_infoc                 C   s,   |   }t| j}|t 9 }t||f  S r   )r0  rx   Zproc_memory_ussr   r   rj   )r   Z	basic_memrk   r.   r.   r/   memory_full_info[  s    
zProcess.memory_full_infoc              
   c   s   zt | j}W n2 tk
rB } zt|| j| jW 5 d }~X Y n>X |D ]6\}}}}t|}tsht|}t	|}||||fV  qHd S r   )
rx   Zproc_memory_mapsr   r   r  r   r}   r   r   hex)r   rawr   addrpermrm   rg   r.   r.   r/   memory_mapsb  s    "zProcess.memory_mapsc                 C   s   t | jS r   )rx   	proc_killr   r   r.   r.   r/   killq  s    zProcess.killc                 C   sT   |t jkrt| j n8|tt dt tt dt fkrHt| j| nt	dd S )NZCTRL_C_EVENTZCTRL_BREAK_EVENTzPonly SIGTERM, CTRL_C_EVENT and CTRL_BREAK_EVENT signals are supported on Windows)
signalSIGTERMrx   r7  r   r   objectrz   r8  r   )r   sigr.   r.   r/   send_signalu  s    
zProcess.send_signalNc                 C   s   |d krt j}nt|d }ttdtj}|d k	r<| | nd }zt | j|}W n> t jk
rx   t|| j| jY n t j	k
r   d }Y nX d}t
| js|S |r| |krt|| j| jdt| t|d d}qd S )Ni  	monotonicr  r  r0   r  )rx   ZINFINITEr   r   r  Z	proc_waitr   r	   r   ZTimeoutAbandoned
pid_existsr  r  )r   timeoutZcext_timeouttimerZstop_at	exit_coder  r.   r.   r/   wait  s$    	


zProcess.waitc                 C   s2   | j dkrdS t| j \}}t|d t| S )Nr   r3   zNT AUTHORITY\SYSTEMru   )r   rx   Zproc_usernamer   )r   domainr[   r.   r.   r/   r     s    
zProcess.usernamec              
   C   sb   zt | j\}}}|W S  tk
r\ } z&t|rJ|  td   W Y S  W 5 d }~X Y nX d S )NrH   )rx   
proc_timesr   r   r   r  r!  )r   r[   r\   createdr   r.   r.   r/   rH     s    zProcess.create_timec                 C   s   |   td  S )NrI   )r  r!  r   r.   r.   r/   rI     s    zProcess.num_threadsc                 C   s<   t | j}g }|D ]"\}}}t|||}|| q|S r   )rx   Zproc_threadsr   r   Zpthreadr   )r   r   r   	thread_idutimeZstimentupler.   r.   r/   threads  s    zProcess.threadsc              
   C   st   zt | j\}}}W nL tk
rb } z.t|s2 |  }|td  }|td  }W 5 d }~X Y nX t||ddS )NrF   rG   r   )	rx   rF  r   r   r   r  r!  r   Z	pcputimes)r   r[   r\   rG  r   r-  r.   r.   r/   r     s    zProcess.cpu_timesc                 C   s   t | jd d S )NTrx   Zproc_suspend_or_resumer   r   r.   r.   r/   suspend  s    zProcess.suspendc                 C   s   t | jd d S )NFrL  r   r.   r.   r/   resume  s    zProcess.resumec                 C   s4   | j dkrt| j | jt| j }ttj|S )NrD  )	r   r   r   rx   Zproc_cwdr   rz   rm   normpath)r   rm   r.   r.   r/   cwd  s    
zProcess.cwdc                 C   sd   | j dkrg S t }t| j }|D ]6}t|}t|r$tsDt|}t	|d}|
| q$t|S )NrD  r(   )r   r   rx   Zproc_open_filesr}   r   r   r   r   Z	popenfiler   r   )r   r   Zraw_file_names_filerJ  r.   r.   r/   
open_files  s    
zProcess.open_filesinetc                 C   s   t || jdS )N)r   )r   r   )r   r   r.   r.   r/   connections  s    zProcess.connectionsc                 C   s    t | j}td k	rt|}|S r   )rx   Zproc_priority_getr   enumr*   r   valuer.   r.   r/   nice_get  s    zProcess.nice_getc                 C   s   t | j|S r   )rx   Zproc_priority_setr   rV  r.   r.   r/   nice_set
  s    zProcess.nice_setc                 C   s    t | j}td k	rt|}|S r   )rx   Zproc_io_priority_getr   rU  r2   r"  r.   r.   r/   
ionice_get  s    zProcess.ionice_getc                 C   s:   |rt d|ttttfkr(td| t| j| d S )Nz&value argument not accepted on Windowsz%s is not a valid priority)		TypeErrorr"   r#   r$   r%   r   rx   Zproc_io_priority_setr   )r   ZioclassrW  r.   r.   r/   
ionice_set  s    zProcess.ionice_setc                 C   s   zt | j}W nt tk
r } zVt|s, |  }|td  |td  |td  |td  |td  |td  f}W 5 d }~X Y nX t| S )NrJ   rK   rL   rM   rN   rO   )rx   Zproc_io_countersr   r   r   r  r!  rp   )r   r   r   r-  r.   r.   r/   io_counters  s    





zProcess.io_countersc                 C   s    t | j}|rtjS tjS d S r   )rx   Zproc_is_suspendedr   r   ZSTATUS_STOPPEDZSTATUS_RUNNING)r   Z	suspendedr.   r.   r/   r   0  s    zProcess.statusc                 C   s   dd }t | j}||S )Nc                    s    fddt dD S )Nc                    s   g | ]}d |>  @ r|qS )r   r.   )r   ir   r.   r/   r   ;  s      zBProcess.cpu_affinity_get.<locals>.from_bitmask.<locals>.<listcomp>@   r   r_  r.   r_  r/   from_bitmask:  s    z.Process.cpu_affinity_get.<locals>.from_bitmask)rx   Zproc_cpu_affinity_getr   )r   ra  bitmaskr.   r.   r/   cpu_affinity_get8  s    zProcess.cpu_affinity_getc                 C   sn   dd }t ttt }|D ]4}||krt|ttfsFtd| qtd| q||}t	
| j| d S )Nc                 S   s.   | st d|  d}| D ]}|d| O }q|S )Nzinvalid argument %rr   r0   )r   )Zlsoutbr.   r.   r/   
to_bitmaskA  s    z,Process.cpu_affinity_set.<locals>.to_bitmaskz&invalid CPU %r; an integer is requiredzinvalid CPU %r)r   r   ry   r   r~   r   r   r[  r   rx   Zproc_cpu_affinity_setr   )r   rW  rf  Zallcpuscpurb  r.   r.   r/   cpu_affinity_set?  s    zProcess.cpu_affinity_setc              
   C   sX   zt | jW S  tk
rR } z&t|r@|  td   W Y S  W 5 d }~X Y nX d S )NrD   )rx   Zproc_num_handlesr   r   r   r  r!  r   r.   r.   r/   rD   X  s    zProcess.num_handlesc                 C   s   |   td  }t|dS )NrE   r   )r  r!  r   Zpctxsw)r   rE   r.   r.   r/   num_ctx_switchesa  s    zProcess.num_ctx_switches)N)rS  ),r+   r,   r-   r   	__slots__r   r  r   r   r  r   r  r  r  r(  r)  r,  r.  r0  r1  r6  r8  r=  rC  r   rH   rI   rK  r   rM  rN  rP  rR  rT  rX  rY  rZ  r\  r]  r   rc  rh  rD   ri  r.   r.   r.   r/   r    s   

	


*
















r  )r(   )NN)r   r   r   r	  rz   r9  sysr  collectionsr   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   _compatr   r   r   r   r   r   r   r   r   r   r   r   rx   ImportErrorr   r   lowerr'  getwindowsversionr   RuntimeErrorrU  Z__extra__all__r&   r  builtin_module_namesr&  r'   IntEnumr)   ZMIB_TCP_STATE_ESTABZCONN_ESTABLISHEDZMIB_TCP_STATE_SYN_SENTZCONN_SYN_SENTZMIB_TCP_STATE_SYN_RCVDZCONN_SYN_RECVZMIB_TCP_STATE_FIN_WAIT1ZCONN_FIN_WAIT1ZMIB_TCP_STATE_FIN_WAIT2ZCONN_FIN_WAIT2ZMIB_TCP_STATE_TIME_WAITZCONN_TIME_WAITZMIB_TCP_STATE_CLOSEDZ
CONN_CLOSEZMIB_TCP_STATE_CLOSE_WAITZCONN_CLOSE_WAITZMIB_TCP_STATE_LAST_ACKZCONN_LAST_ACKZMIB_TCP_STATE_LISTENZCONN_LISTENZMIB_TCP_STATE_CLOSINGZCONN_CLOSINGZMIB_TCP_STATE_DELETE_TCBZPSUTIL_CONN_NONEZ	CONN_NONEr   r*   globalsr   __members__r"   r#   r$   r%   r2   r   r!  rZ   r`   rf   _fieldsrj   rl   rv   rn   rp   r}   r   r   r   r   Zdisk_io_countersr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r   Zpidsr?  r*  r   r  r  r  r  r.   r.   r.   r/   <module>   s  

        

             

            


			
 *

