U
    ˜Ëj*Š  ã                   @   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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 nl e!k
�r° Z" zLe#e"ƒ $¡  %d¡�rže &¡ d dk �rždZ'e'd7 Z'e'd7 Z'e(e'ƒe"‚n‚ W 5 dZ"["X Y nX ddd d!d"d#d$d%d&d'd(d)d*d+gZ)d,Z*d-Z+d.ej,kZ-e .d/d+d0i¡Z/e/j0Z0e j1e
j2e j3e
j4e j5e
j6e j7e
j8e j9e
j:e j;e
j<e j=e
j>e j?e
j@e jAe
jBe jCe
jDe jEe
jFe jGe*e jHe
jIiZJG d1d2„ d2ej.ƒZKeLƒ  MeKjN¡ G d3d4„ d4ej.ƒZOeLƒ  MeOjN¡ ePddd5d6d7d8dd9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdH�ZQejRdIdJ�dKdL„ ƒZSedMdN„ ƒZTdOdP„ ZUdQdR„ ZVe jWZWe jXZXe jYZYdSdT„ ZZdUdV„ Z[dWdX„ Z\dYdZ„ Z]d[d\„ Z^d]d^„ Z_d_d`„ Z`dadb„ Zadcabe c¡ Zdddde„ Zedfdg„ Zfd„dhdi„Zgdjdk„ Zhdldm„ Zidndo„ Zjdpdq„ Zkdaldrds„ Zmdtdu„ Zndvd„ Zodwd„ ZpG dxdy„ dyƒZqe jrZre jsZse jtZtdzd{„ Zud…d|d}„Zvd~d„ Zwd€d�„ ZxG d‚dƒ„ dƒƒZydS )†z Windows platform implementation.é    Né   )Ú_common)Ú_ntuples)ÚENCODING)ÚAccessDenied)ÚNoSuchProcess)ÚTimeoutExpired)Ú	conn_tmap)Úconn_to_ntuple)Údebug)Úisfile_strict)Úmemoize)Úmemoize_when_activated)Úparse_environ_block)Úusage_percent)Ú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__ÚAddressFamilyéÿÿÿÿc                   @   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'   ú5/tmp/pip-unpacked-wheel-3no1_rt3/psutil/_pswindows.pyr#   e   s   r#   c                   @   s   e Zd ZdZdZdZdZdS )Ú
IOPriorityr   r   é   é   N)r$   r%   r&   r   r   r   r   r'   r'   r'   r(   r)   q   s   r)   r*   r+   é   é   é   é   é	   é
   é   é   é   é   é   é   é   é   é   é   é   )Ú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_privatei   )Úmaxsizec                 C   s¦   |   d¡r| S d |  d¡dd… ¡}|dkrdd |  d¡dd… ¡}dd |  d¡dd… ¡ }n$|  d¡r~|  d¡d }n
t |¡}| t|ƒd… }tj ||¡S )	zÌConvert paths using native DOS format like:
        "\Device\HarddiskVolume1\Windows\systemew\file.txt" or
        "\??\C:\Windows\systemew\file.txt"
    into:
        "C:\Windows\systemew\file.txt".
    z\\ú\Nr+   >   ú\Device\Mupú\??\UNCr-   z\??\r*   )Ú
startswithÚjoinÚsplitÚcextZQueryDosDeviceÚlenÚosÚpath)ÚsZrawdriveZdriveletterÚ	remainderr'   r'   r(   Úconvert_dos_path™   s    


r`   c                   C   s   t  ¡ S ©N)rZ   Úgetpagesizer'   r'   r'   r(   rb   ¯   s    rb   c            
      C   sL   t  ¡ } | \}}}}|}|}|}|| }t|| |dd�}	t |||	||¡S )z&System virtual memory as a namedtuple.r   ©Zround_)rZ   Úvirtual_memr   ÚntpZsvmem)
ÚmemZtotphysZ	availphysZ_totsysZ	_availsysÚtotalZavailÚfreeÚusedÚpercentr'   r'   r(   Úvirtual_memory¹   s    rk   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   r*   g{®Gáz„?ç        r   )rZ   rd   Zswap_percentÚintÚroundre   Zsswap)rf   Z
total_physZtotal_systemrg   Zpercentswapri   rh   rj   r'   r'   r(   Úswap_memoryÅ   s    
ro   c                 C   sF   t | tƒr| jtdd�} t | ¡\}}}t||dd�}t ||||¡S )z'Return disk usage associated with path.Ústrict)Úerrorsr   rc   )	Ú
isinstanceÚbytesÚdecoder   rZ   Ú
disk_usager   re   Z
sdiskusage)r]   rg   ri   rh   rj   r'   r'   r(   ru   ì   s
    
ru   c                 C   s   t  | ¡}dd„ |D ƒS )zReturn disk partitions.c                 S   s   g | ]}t j|Ž ‘qS r'   )re   Z	sdiskpart)Ú.0Úxr'   r'   r(   Ú
<listcomp>ú   s     z#disk_partitions.<locals>.<listcomp>)rZ   Údisk_partitions)ÚallÚrawlistr'   r'   r(   ry   ÷   s    
ry   c                  C   s@   t  ¡ \} }}tj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)rv   Únr'   r'   r(   rx   	  s     zcpu_times.<locals>.<listcomp>)rZ   Ú	cpu_timesre   Ú	scputimesÚzipÚper_cpu_timesÚ	interruptÚdpc)ÚuserÚsystemÚidleZ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.)rZ   r�   re   r   Úappend)Úretr„   r…   r†   r‚   rƒ   Úitemr'   r'   r(   r�     s
    r�   c                   C   s   t  ¡ S )z0Return the number of logical CPUs in the system.)rZ   Úcpu_count_logicalr'   r'   r'   r(   rŠ     s    rŠ   c                   C   s   t  ¡ S )z-Return the number of CPU cores in the system.)rZ   Úcpu_count_coresr'   r'   r'   r(   r‹     s    r‹   c                  C   s$   t  ¡ \} }}}d}t | |||¡S )zReturn CPU statistics.r   )rZ   Ú	cpu_statsre   Z	scpustats)r>   Z
interruptsZ_dpcsZsyscallsZsoft_interruptsr'   r'   r(   rŒ   #  s    rŒ   c                  C   s(   t  ¡ \} }d}t t| ƒ|t|ƒ¡gS )zMReturn CPU frequency.
    On Windows per-cpu frequency is not supported.
    rl   )rZ   Úcpu_freqre   ZscpufreqÚfloat)ÚcurrZmax_Zmin_r'   r'   r(   r�   *  s    r�   Fc                  C   s   t  ¡ } tdd„ | D ƒƒS )Nc                 s   s   | ]}t |d ƒV  qdS )r*   N)rn   )rv   Úloadr'   r'   r(   Ú	<genexpr>:  s     z#_getloadavg_impl.<locals>.<genexpr>)rZ   Ú
getloadavgÚtuple)Z	raw_loadsr'   r'   r(   Ú_getloadavg_impl7  s    r”   c                	   C   s0   t r
tƒ S t� t s t ¡  da W 5 Q R X tƒ S )z„Return the number of processes in the system run queue averaged
    over the last 1, 5, and 15 minutes respectively as a tuple.
    T)Ú_loadavg_initializedr”   Ú_lockrZ   Zinit_loadavg_counterr'   r'   r'   r(   r’   =  s    r’   c                 C   sr   t |  \}}t |||¡}tƒ }|D ]D}|\}}}	}
}}}t|||	|
||t|dkrV|ndd�}| |¡ q$t|ƒS )zˆReturn socket connections.  If pid == -1 return system-wide
    connections (as opposed to connections opened by one process only).
    r"   N)Úpid)r	   rZ   Únet_connectionsÚsetr
   ÚTCP_STATUSESÚaddÚlist)ÚkindÚ_pidZfamiliesÚtypesr{   rˆ   r‰   ÚfdZfamÚtypeÚladdrÚraddrÚstatusr—   Úntr'   r'   r(   r˜   S  s"    ø
r˜   c                  C   sX   i } t  ¡ }| ¡ D ]>\}}|\}}}}ttdƒr<t |¡}t ||||d¡| |< q| S )z)Get NIC stats (isup, duplex, speed, mtu).Ú	NicDuplexÚ )rZ   Únet_if_statsÚitemsÚhasattrr   r¦   re   Z	snicstats)rˆ   ZrawdictÚnamer©   ZisupZduplexÚspeedZmtur'   r'   r(   r¨   j  s    

r¨   c                   C   s   t  ¡ S )zsReturn network I/O statistics for every network interface
    installed on the system as a dict of raw tuples.
    )rZ   Únet_io_countersr'   r'   r'   r(   r­   v  s    r­   c                   C   s   t  ¡ S )z,Return the addresses associated to each NIC.)rZ   Únet_if_addrsr'   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   é€   r/   Nr"   )rZ   Úsensors_batteryÚboolr   ZPOWER_TIME_UNLIMITEDZPOWER_TIME_UNKNOWNre   Zsbattery)Zacline_statusÚflagsrj   ZsecsleftZpower_pluggedZ
no_batteryZchargingr'   r'   r(   r°   ‡  s    r°   c                  C   s0   t   ¡ t ¡  } t| t ƒdkr$tS | a| S dS )z�The system boot time expressed in seconds since the epoch. This
    also includes the time spent during hybernate / suspend.
    r   N)ÚtimerZ   ZuptimeÚabsÚ_last_btime)rˆ   r'   r'   r(   Ú	boot_time£  s
    r¶   c                  C   s@   g } t  ¡ }|D ]*}|\}}}t |d||d¡}|  |¡ q| S )z:Return currently connected users as a list of namedtuples.N)rZ   Úusersre   Zsuserr‡   )Úretlistr{   r‰   r„   ÚhostnameZtstampr¥   r'   r'   r(   r·   ³  s    
r·   c                  c   s"   t  ¡ D ]\} }t| |ƒV  qdS )z*Yields a list of WindowsService instances.N)rZ   Zwinservice_enumerateÚWindowsService)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 ra   )Ú_namer½   )Úselfr«   r»   r'   r'   r(   Ú__init__Ó  s    zWindowsService.__init__c                 C   s&   d| j ›d| j›d�}| jj› |› �S )Nz(name=z, display_name=ú))r¾   r½   Ú	__class__r$   )r¿   Údetailsr'   r'   r(   Ú__str__×  s    zWindowsService.__str__c                 C   s   d|   ¡ › dt| ƒ› d�S )Nú<z at ú>)rÄ   Úid©r¿   r'   r'   r(   Ú__repr__Û  s    zWindowsService.__repr__c                 C   s   t |tƒstS | j|jkS ra   )rr   rº   ÚNotImplementedr¾   ©r¿   Úotherr'   r'   r(   Ú__eq__Þ  s    
zWindowsService.__eq__c                 C   s
   | |k S ra   r'   rË   r'   r'   r(   Ú__ne__å  s    zWindowsService.__ne__c              	   C   s8   |   ¡ � t | j¡\}}}}W 5 Q R X t||||d�S )N)r»   ÚbinpathÚusernameÚ
start_type)Ú_wrap_exceptionsrZ   Zwinservice_query_configr¾   Údict)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Ò   rZ   Zwinservice_query_statusr¾   rÓ   )r¿   r¤   r—   r'   r'   r(   Ú_query_statusõ  s
    
zWindowsService._query_statusc              
   c   s�   z
dV  W n€ t k
rŠ } zb| j}t|ƒrHd|›d�}td||d�|‚n2|jtjtjhkrxd|›d�}td||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.
        Nzservice z( is not querable (not enough privileges)©r—   r«   Úmsgz does not exist)	ÚOSErrorr¾   Úis_permission_errr   ÚwinerrorrZ   ZERROR_INVALID_NAMEZERROR_SERVICE_DOES_NOT_EXISTr   )r¿   Úerrr«   rÖ   r'   r'   r(   rÒ   ü  s    

ÿþzWindowsService._wrap_exceptionsc                 C   s   | j S )z¢The 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«     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Ð   (  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Ñ   ,  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—   4  s    zWindowsService.pidc                 C   s   |   ¡ d S )zService status as a string.r¤   rÜ   rÈ   r'   r'   r(   r¤   :  s    zWindowsService.statusc                 C   s   t  |  ¡ ¡S )zService long description.)rZ   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_dictD  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| ƒ‚t | tƒp,| jtjtjhkS )z*Return True if this is a permission error.)rr   r×   ÚAssertionErrorÚPermissionErrorrÙ   rZ   ZERROR_ACCESS_DENIEDZERROR_PRIVILEGE_NOT_HELD)Úexcr'   r'   r(   rØ   �  s
    þrØ   c                 C   sD   t | tƒst| ƒ‚t| ƒr&t||d�S t | tƒr<t||d�S | ‚dS )z3Convert OSError into NoSuchProcess or AccessDenied.©r—   r«   N)rr   r×   rä   rØ   r   ÚProcessLookupErrorr   )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              
      sN   zˆ | f|ž|ŽW S  t k
rH } 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 )z�Workaround for https://github.com/giampaolo/psutil/issues/875.
    See: https://stackoverflow.com/questions/4457745#4457745.
    c                    sª   d}d}t |ƒD ]n}zˆ | f|ž|ŽW   S  tk
r| } z4|}|jtkrjt |¡ t|d dƒ}W Y ¢q‚ W 5 d }~X Y qX qˆ › d|› d|› �}t| j| j	|d�‚d S )Nç-Cëâ6?é!   r*   ç{®Gáz¤?z	 retried z: times, converted to AccessDenied as it's still returning rÕ   )
Úranger×   rÙ   ÚERROR_PARTIAL_COPYr³   ÚsleepÚminr   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dQd%d&„ƒZed'd(„ ƒZedRd*d+„ƒZed,d-„ ƒZed.d/„ ƒZed0d1„ ƒZed2d3„ ƒZed4d5„ ƒZeed6d7„ ƒƒZed8d9„ ƒZ edSd;d<„ƒZ!ed=d>„ ƒZ"ed?d@„ ƒZ#edAdB„ ƒZ$edCdD„ ƒZ%edEdF„ ƒZ&edGdH„ ƒZ'edIdJ„ ƒZ(edKdL„ ƒZ)edMdN„ ƒZ*edOdP„ ƒZ+d$S )TÚProcessz1Wrapper class around underlying C implementation.Ú_cacher¾   Ú_ppidr—   c                 C   s   || _ d | _d | _d S ra   )r—   r¾   r  )r¿   r—   r'   r'   r(   rÀ   Â  s    zProcess.__init__c                 C   s   | j  | ¡ | j | ¡ d S ra   )Ú
_proc_infoZcache_activateÚexerÈ   r'   r'   r(   Úoneshot_enterÉ  s    zProcess.oneshot_enterc                 C   s   | j  | ¡ | j | ¡ d S ra   )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.
        )rZ   Z	proc_infor—   r[   Ú	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 Processr,   ÚSystem)r—   r\   r]   Úbasenamer  rÈ   r'   r'   r(   r«   Ú  s
    

zProcess.namec              
   C   s†   t rdzt | j¡}W qp tk
r` } z.|jdkrNt|›d�ƒ t| j| jƒ|‚‚ W 5 d }~X Y qpX nt | j¡}| 	d¡r‚t
|ƒS |S )Né   z translated into AccessDeniedrT   )ÚPYPYrZ   Zproc_exer—   r×   Úerrnor   r   r¾   rW   r`   )r¿   r  rÚ   r'   r'   r(   r  æ  s    

zProcess.exec              
   C   sz   t jt jkrfzt j| jdd�W S  tk
rb } z&t|ƒrPt j| jdd� W Y ¢S ‚ W 5 d }~X Y qvX nt j| jdd�S d S )NT)Zuse_pebF)rZ   ZWINVERZWINDOWS_8_1Zproc_cmdliner—   r×   rØ   ©r¿   rÚ   r'   r'   r(   Úcmdlineù  s    zProcess.cmdlinec                 C   s   t  | j¡}t|ƒS ra   )rZ   Zproc_environr—   r   )r¿   r^   r'   r'   r(   Úenviron	  s    zProcess.environc                 C   s8   zt ƒ | j W S  tk
r2   t| j| jƒd ‚Y nX d S ra   )Úppid_mapr—   ÚKeyErrorr   r¾   rÈ   r'   r'   r(   Úppid  s    zProcess.ppidc                 C   sÀ   zt  | j¡W S  tk
rº } zŽt|ƒr¨tdƒ |  ¡ }|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 )Nz*attempting memory_info() fallback (slower)rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   )rZ   Zproc_memory_infor—   r×   rØ   r   r  r  )r¿   rÚ   Úinfor'   r'   r(   Ú_get_raw_meminfo  s$    









özProcess._get_raw_meminfoc                 C   s*   |   ¡ }|d }|d }tj||f| Ž S )Nr*   r.   )r  re   Zpmem)r¿   ÚtÚrssZvmsr'   r'   r(   Úmemory_info,  s    zProcess.memory_infoc                 C   s.   |   ¡ }t | j¡}|tƒ 9 }tj||f Ž S ra   )r  rZ   Zproc_memory_ussr—   rb   re   Zpfullmem)r¿   Z	basic_memZussr'   r'   r(   Úmemory_full_info6  s    
zProcess.memory_full_infoc              
   c   sz   zt  | j¡}W n4 tk
rD } zt|| j| jƒ|‚W 5 d }~X Y n2X |D ]*\}}}}t|ƒ}t|ƒ}||||fV  qJd S ra   )rZ   Zproc_memory_mapsr—   r×   ré   r¾   r`   Úhex)r¿   ÚrawrÚ   ÚaddrÚpermr]   r  r'   r'   r(   Úmemory_maps=  s    $zProcess.memory_mapsc                 C   s   t  | j¡S ra   )rZ   Ú	proc_killr—   rÈ   r'   r'   r(   ÚkillJ  s    zProcess.killc                 C   sH   |t jkrt | j¡ n,|t jt jhkr8t | j|¡ nd}t	|ƒ‚d S )NzPonly SIGTERM, CTRL_C_EVENT and CTRL_BREAK_EVENT signals are supported on Windows)
ÚsignalÚSIGTERMrZ   r  r—   ZCTRL_C_EVENTZCTRL_BREAK_EVENTr\   r  Ú
ValueError)r¿   ÚsigrÖ   r'   r'   r(   Úsend_signalN  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 nN t jk
rˆ } zt|| j| jƒ|‚W 5 d }~X Y n t j	k
r    d }Y nX d}t
| jƒs´|S |rÔ|ƒ |krÔt|| j| jd�‚t |¡ t|d dƒ}q¦d S )Niè  Ú	monotonicrô   rç   r*   rö   )rZ   ZINFINITErm   Úgetattrr³   Z	proc_waitr—   r   r¾   ZTimeoutAbandonedÚ
pid_existsrù   rú   )r¿   ÚtimeoutZcext_timeoutZtimerZstop_atZ	exit_coderÚ   rû   r'   r'   r(   Úwait[  s$    "	


zProcess.waitc                 C   s,   | j dkrdS t | j ¡\}}|› d|› �S )N¾   r   r,   zNT AUTHORITY\SYSTEMrT   )r—   rZ   Zproc_username)r¿   Údomainr„   r'   r'   r(   rÐ   †  s    
zProcess.usernameFc              
   C   sp   zt  | j¡\}}}|W S  tk
rj } z4t|ƒrX|r8‚ tdƒ |  ¡ td   W Y ¢S ‚ W 5 d }~X Y nX d S )Nz*attempting create_time() fallback (slower)rA   )rZ   Ú
proc_timesr—   r×   rØ   r   r  r  )r¿   Z	fast_onlyÚ_userZ_systemÚcreatedrÚ   r'   r'   r(   rA   �  s    zProcess.create_timec                 C   s   |   ¡ td  S )NrB   )r  r  rÈ   r'   r'   r(   rB   œ  s    zProcess.num_threadsc                 C   s<   t  | j¡}g }|D ]"\}}}t |||¡}| |¡ q|S ra   )rZ   Zproc_threadsr—   re   Zpthreadr‡   )r¿   r{   r¸   Z	thread_idÚutimeZstimeÚntupler'   r'   r(   Úthreads   s    zProcess.threadsc              
   C   s|   zt  | j¡\}}}W nT tk
rj } z6t|ƒs2‚ tdƒ |  ¡ }|td  }|td  }W 5 d }~X Y nX t 	||dd¡S )Nz(attempting cpu_times() fallback (slower)r?   r@   rl   )
rZ   r,  r—   r×   rØ   r   r  r  re   Z	pcputimes)r¿   r„   r…   Z_createdrÚ   r  r'   r'   r(   r~   ©  s    zProcess.cpu_timesc                 C   s   t  | jd¡ d S )NT©rZ   Zproc_suspend_or_resumer—   rÈ   r'   r'   r(   Úsuspend·  s    zProcess.suspendc                 C   s   t  | jd¡ d S )NFr2  rÈ   r'   r'   r(   Úresume»  s    zProcess.resumec                 C   s0   | j dkrt| j | jƒ‚t | j ¡}tj |¡S )Nr*  )r—   r   r¾   rZ   Zproc_cwdr\   r]   Únormpath)r¿   r]   r'   r'   r(   Úcwd¿  s    
zProcess.cwdc                 C   sX   | j dkrg S tƒ }t | j ¡}|D ]*}t|ƒ}t|ƒr$t |d¡}| |¡ q$t	|ƒS )Nr*  r"   )
r—   r™   rZ   Zproc_open_filesr`   r   re   Z	popenfiler›   rœ   )r¿   rˆ   Zraw_file_namesÚfiler0  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(   r˜   Ú  s    zProcess.net_connectionsc                 C   s   t  | j¡}t|ƒ}|S ra   )rZ   Zproc_priority_getr—   r#   ©r¿   Úvaluer'   r'   r(   Únice_getÞ  s    zProcess.nice_getc                 C   s   t  | j|¡S ra   )rZ   Zproc_priority_setr—   r:  r'   r'   r(   Únice_setä  s    zProcess.nice_setc                 C   s   t  | j¡}t|ƒ}|S ra   )rZ   Zproc_io_priority_getr—   r)   r  r'   r'   r(   Ú
ionice_getè  s    zProcess.ionice_getc                 C   sL   |rd}t |ƒ‚|tjtjtjtjhkr:|› d�}t|ƒ‚t | j	|¡ d S )Nz&value argument not accepted on Windowsz is not a valid priority)
Ú	TypeErrorr)   r   r   r   r   r"  rZ   Zproc_io_priority_setr—   )r¿   Zioclassr;  rÖ   r'   r'   r(   Ú
ionice_setî  s    ü
zProcess.ionice_setc                 C   s˜   zt  | j¡}W n| tk
rŒ } z^t|ƒs,‚ tdƒ |  ¡ }|td  |td  |td  |td  |td  |td  f}W 5 d }~X Y nX tj	|Ž S )Nz*attempting io_counters() fallback (slower)rC   rD   rE   rF   rG   rH   )
rZ   Zproc_io_countersr—   r×   rØ   r   r  r  re   Zpio)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 ra   )rZ   Zproc_is_suspendedr—   r   ZSTATUS_STOPPEDZSTATUS_RUNNING)r¿   Z	suspendedr'   r'   r(   r¤     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'   )rv   Úi©rw   r'   r(   rx     s      zBProcess.cpu_affinity_get.<locals>.from_bitmask.<locals>.<listcomp>é@   )r÷   rC  r'   rC  r(   Úfrom_bitmask  s    z.Process.cpu_affinity_get.<locals>.from_bitmask)rZ   Zproc_cpu_affinity_getr—   )r¿   rE  Úbitmaskr'   r'   r(   Úcpu_affinity_get  s    zProcess.cpu_affinity_getc                 C   sv   dd„ }t tttƒ ƒƒƒ}|D ]<}||krt|tƒsHd|›d�}t|ƒ‚d|›�}t|ƒ‚q||ƒ}t 	| j
|¡ d S )Nc                 S   s4   | sd| ›�}t |ƒ‚d}| D ]}|d| O }q|S )Nzinvalid argument r   r*   )r"  )ZlsrÖ   ÚoutÚbr'   r'   r(   Ú
to_bitmask"  s    
z,Process.cpu_affinity_set.<locals>.to_bitmaskzinvalid CPU z; an integer is required)rœ   r÷   r[   r�   rr   rm   r?  r"  rZ   Zproc_cpu_affinity_setr—   )r¿   r;  rJ  ZallcpusÚcpurÖ   rF  r'   r'   r(   Úcpu_affinity_set   s    


zProcess.cpu_affinity_setc              
   C   s`   zt  | j¡W S  tk
rZ } z.t|ƒrHtdƒ |  ¡ td   W Y ¢S ‚ W 5 d }~X Y nX d S )Nz*attempting num_handles() fallback (slower)r=   )rZ   Zproc_num_handlesr—   r×   rØ   r   r  r  r  r'   r'   r(   r=   :  s    zProcess.num_handlesc                 C   s   |   ¡ td  }t |d¡S )Nr>   r   )r  r  re   Zpctxsw)r¿   r>   r'   r'   r(   Únum_ctx_switchesD  s    zProcess.num_ctx_switches)N)F)r9  ),r$   r%   r&   rá   Ú	__slots__rÀ   r  r  r   r  r«   ró   r  rþ   r  r  r  r  r  r  r  r  r$  r)  rÐ   rA   rB   r1  r~   r3  r4  r6  r8  r˜   r<  r=  r>  r@  rA  r¤   rG  rL  r=   rM  r'   r'   r'   r(   rÿ   ½  sŽ   

	


*















	rÿ   )r"   )NN)zrá   râ   Úenumrð   r\   r   ÚsysÚ	threadingr³   r§   r   r   re   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   rZ   ÚImportErrorrÚ   ÚstrÚlowerrW   ÚgetwindowsversionrÖ   ÚRuntimeErrorZ__extra__all__r   rø   Úbuiltin_module_namesr  ÚIntEnumr!   r    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  Ú	lru_cacher`   rb   rk   ro   Z	heap_infoZ	heap_trimZdisk_io_countersru   ry   r~   r�   rŠ   r‹   rŒ   r�   r•   ÚLockr–   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>   s8  ÿþ        ÷
             ó	ê


			

 -	

