a
    áªlcDn  ã                
   @   s8  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krddlZndZejd dkZee d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&p”e'p”e(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/ZCd0ZDd1ZEedu r.d2ZFd3ZGdZHn G d4d5„ d5ejIƒZJeKƒ  LeJjM¡ edu rbd6ZNd7ZOn G d8d9„ d9ejIƒZPeKƒ  LePjM¡ e Q¡ ZRes–d:ZSn0ze T¡ ZSW n" eUyÄ   er¼d;nd:ZSY n0 ed<g d=¢ƒZVed>g d?¢ƒZWed@g dA¢ƒZXedBg dC¢ƒZYedDg dE¢ƒZZedFg dG¢ƒZ[edHg dI¢ƒZ\edJg dK¢ƒZ]edLg dM¢ƒZ^edNg dO¢ƒZ_edPg dQ¢ƒZ`edRg dS¢ƒZaedTg dU¢ƒZbedVdWdXgƒZcedYg dZ¢ƒZded[d\d]gƒZeed^g d_¢ƒZfed`g da¢ƒZgedbg da¢ƒZhedcg dd¢ƒZiededfdggƒZjedhdidjgƒZkedkg dl¢ƒZledmdndogƒ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dpœZnedur¨en Legegfegegfdqœ¡ edurÊen Ldregeegfi¡ G dsdt„ dteoƒZpG dudv„ dvepƒZqG dwdx„ dxeqƒZrG dydz„ dzepƒZsG d{d|„ d|epƒZtd±d}d~„Zudd€„ Zvdd‚„ Zwdƒd„„ Zxd…d†„ Zyevd‡dˆ„ ƒZzd‰dŠ„ Z{d‹dŒ„ Z|ddŽ„ Z}d²dd„Z~d‘d’„ ZG d“d”„ d”ƒZ€d•d–„ Ze€ƒ Z‚e‚jƒe_ƒe‚j„e_„d—Z…d˜d™„ Z†dšd›„ Z‡ee‡fdœd„ZˆefdždŸ„Z‰d³d¡d¢„ZŠd£d¤„ Z‹eröd¥d¦„ ZŒnd§d¦„ ZŒevejfd¨d©„ƒZŽd´d«d¬„Zddªejfd­d®„Zd¯d°„ Z‘d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)é   é   r
   Ú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ÚaixÚrunningÚsleepingz
disk-sleepÚstoppedztracing-stopÚzombieZdeadz	wake-killZwakingÚ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 )Ú	NicDuplexrl   rm   r   N)Ú__name__Ú
__module__Ú__qualname__r#   r$   r%   © rr   rr   úJ/var/www/html/django/DPS/env/lib/python3.9/site-packages/psutil/_common.pyrn   Œ   s   rn   éÿÿÿÿéþÿÿÿc                   @   s   e Zd ZdZdZdS )ÚBatteryTimert   ru   N)ro   rp   rq   ÚPOWER_TIME_UNKNOWNÚPOWER_TIME_UNLIMITEDrr   rr   rr   rs   rv   ˜   s   rv   ÚreplaceÚsurrogateescaperG   )ÚtotalÚusedÚfreeÚpercentÚsinZsoutrC   )r{   r|   r}   r~   rA   )Ú
read_countÚwrite_countÚ
read_bytesÚwrite_bytesZ	read_timeZ
write_timerB   )ZdeviceZ
mountpointZfstypeÚoptsZmaxfileZmaxpathrD   )Z
bytes_sentZ
bytes_recvZpackets_sentZpackets_recvZerrinZerroutZdropinZdropoutrH   )ÚnameZterminalÚhostÚstartedÚpidr?   )ÚfdÚfamilyÚtypeÚladdrÚraddrÚstatusrˆ   rE   )rŠ   ÚaddressÚnetmaskÚ	broadcastZptprF   )ZisupZduplexÚspeedZmtuÚflagsr@   )Zctx_switchesZ
interruptsZsoft_interruptsZsyscallsÚscpufreq)ÚcurrentÚminÚmaxÚshwtemp)Úlabelr•   ÚhighÚcriticalÚsbattery)r~   ZsecsleftZpower_pluggedÚsfanr™   r•   r7   )ÚuserÚsystemÚchildren_userÚchildren_systemr<   Úpathr‰   r=   )ÚidZ	user_timeZsystem_timer>   )ÚrealZ	effectiveZsavedr9   r:   )r€   r   r‚   rƒ   r;   ZioclassÚvaluer8   Z	voluntaryZinvoluntaryr6   )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¥   rr   rr   rs   Ú	_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=%rrr   ©Ú.0ÚkÚvrr   rr   rs   Ú
<listcomp>+  ó    z!Error.__str__.<locals>.<listcomp>ú c                 S   s   g | ]}|r|‘qS rr   rr   )r¸   Úxrr   rr   rs   r»   .  r¼   ÚmsgÚ )r³   ÚjoinÚitemsr¯   ©r°   r²   Údetailsrr   rr   rs   Ú__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¶   rr   r·   rr   rr   rs   r»   3  r¼   z"Error.__repr__.<locals>.<listcomp>zpsutil.%s(%s))r³   rÁ   rÂ   Ú	__class__ro   rÃ   rr   rr   rs   Ú__repr__0  s    
zError.__repr__N)ro   rp   rq   Ú__doc__r³   rÅ   rÈ   rr   rr   rr   rs   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¿   rr   rr   rs   rÌ   =  s    
zNoSuchProcess.__init__)NN©ro   rp   rq   rÉ   rÌ   rr   rr   rr   rs   rÊ   7  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¿   rr   rr   rs   rÌ   M  s    zZombieProcess.__init__)NNNrÎ   rr   rr   rr   rs   rÏ   D  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Í   rr   rr   rs   rÌ   W  s    
zAccessDenied.__init__)NNNrÎ   rr   rr   rr   rs   rÐ   S  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…   rr   rr   rs   rÌ   d  s
    
zTimeoutExpired.__init__)NNrÎ   rr   rr   rr   rs   rÑ   ^  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)r|   r{   Zround_Úretrr   rr   rs   rO   q  s    
rO   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()
    >>>
    c                     sP   | t t| ¡ ƒƒf}z
ˆ | W S  tyJ   ˆ| i |¤Ž }ˆ |< | Y S 0 d S ©N)Ú	frozensetÚsortedrÂ   ÚKeyError)ÚargsÚkwargsÚkeyrÖ   ©ÚcacheÚfunrr   rs   Úwrapper‹  s    
zmemoize.<locals>.wrapperc                      s   ˆ   ¡  dS )zClear cache.N)Úclearrr   )rß   rr   rs   Úcache_clear”  s    zmemoize.<locals>.cache_clear)Ú	functoolsÚwrapsrã   )rà   rá   rã   rr   rÞ   rs   rL   }  s    rL   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                    sh   z| j ˆ  }W nT ty(   ˆ | ƒ Y S  tyb   ˆ | ƒ}z|| j ˆ < W n ty\   Y n0 Y n0 |S r×   )Ú_cacheÚAttributeErrorrÚ   )r°   rÖ   ©rà   rr   rs   rá   ·  s    z'memoize_when_activated.<locals>.wrapperc                 S   s
   i | _ dS )zjActivate cache. Expects a Process instance. Cache will be
        stored as a "_cache" instance attribute.N)ræ   ©Úprocrr   rr   rs   Ú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é   rr   rr   rs   Úcache_deactivateÐ  s    z0memoize_when_activated.<locals>.cache_deactivate)rä   rå   rë   rì   )rà   rá   rë   rì   rr   rè   rs   Ú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 )zœSame 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¢   ÚstÚerrrr   rr   rs   rK   Ü  s    rK   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 )zœSame 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÷   rr   rr   rs   rN   ë  s    rN   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)Úsockrr   rr   rs   rP   ú  s    (rP   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   ú ú=rm   )r   ÚfindÚupper)ÚdatarÖ   ÚposZWINDOWS_Znext_posZ	equal_posrÝ   r¥   rr   rr   rs   rM     s    
rM   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©Únumrr   rr   rs   rQ   $  s    rQ   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  rr   rr   rs   rR   1  s    rR   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   rQ   rR   r6   r?   )r‰   ÚfamÚtype_rŒ   r   rŽ   Z
status_maprˆ   rr   rr   rs   rY   >  s    rY   c                    s   ‡ fdd„}|S )zƒA 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 )Nrl   )ÚcategoryÚ
stacklevel)ÚwarningsÚwarnÚDeprecationWarningr¯   )r°   rÛ   rÜ   )r¿   Úreplacementrr   rs   Úinner[  s    z/deprecated_method.<locals>.outer.<locals>.inner)ro   rÉ   rä   rå   )rà   r  ©r  )r¿   rs   ÚouterU  s    ÿ
z deprecated_method.<locals>.outerrr   )r  r  rr   r  rs   rJ   Q  s    rJ   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°   rr   rr   rs   rÌ   h  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…   rr   rr   rs   Ú	_add_dictn  s    
z_WrapNumbers._add_dictc                 C   s\   | j | }t| ¡ ƒt| ¡ ƒ }|D ]0}| j| | D ]}| j| |= q8| j| |= q&dS )z†In 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Úremkeyrr   rr   rs   Ú_remove_dead_remindersv  s    
z#_WrapNumbers._remove_dead_remindersc              	   C   s  || j vr|  ||¡ |S |  ||¡ | j | }i }| ¡ D ]¼}|| }z|| }W n tyr   |||< Y q<Y n0 g }tt|ƒƒD ]f}	||	 }
||	 }||	f}|
|k rÒ| j| |  |7  < | j| |  	|¡ | 
|
| j| |  ¡ q„t|ƒ||< q<|| j |< |S )zkCache dict and sum numbers which overflow and wrap.
        Return an updated copy of `input_dict`
        )rß   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%  rr   rr   rs   Ú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…   rr   rr   rs   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  rr   rr   rs   Ú
cache_info´  s    z_WrapNumbers.cache_info)N)
ro   rp   rq   rÉ   rÌ   r"  r&  r/  rã   r1  rr   rr   rr   rs   r  c  s   '
r  c                 C   s6   t j t  | |¡W  d  ƒ S 1 s(0    Y  dS )zÅGiven 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…   rr   rr   rs   rS   º  s    rS   i €  c                 C   s   t | dtdS )NÚrb©Ú	buffering)ÚopenÚFILE_READ_BUFFER_SIZE)Úfnamerr   rr   rs   rU   ×  s    rU   c                 C   s`   t st| dtdS t| dtttd}z
t|_W n, ty@   Y n tyZ   | ¡  ‚ Y n0 |S )z¨On 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').
    Úrtr4  )r5  ÚencodingÚerrors)	ÚPY3r6  r7  r4   r5   Ú_CHUNK_SIZErç   Ú	ExceptionÚclose)r8  Zfobjrr   rr   rs   rT   Û  s    ÿ
rT   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 )zÛRead 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ð   )r8  ÚfallbackÚ_openÚfrr   rr   rs   rV   õ  s    
(
,rV   c                 C   s   t | |tdS )z,Same as above but opens file in binary mode.)rC  rD  )rV   rU   )r8  rC  rr   rr   rs   rW     s    rW   ú%(value).1f%(symbol)sc                 C   sŠ   d}i }t |dd… ƒD ]\}}d|d d > ||< qt|dd… ƒD ].}| || krFt| ƒ||  }|tƒ    S qF|t|d | d S )zŒUsed by various scripts. See:
    http://goo.gl/zeJZl

    >>> bytes2human(10000)
    '9.8K'
    >>> bytes2human(100001221)
    '95.4M'
    )	ÚBÚKÚMÚGÚTÚPÚEÚZÚYrm   Né
   r   )Úsymbolr¥   )Ú	enumerateÚreversedrÓ   ÚlocalsÚdict)ÚnÚformatÚsymbolsÚprefixr-  ÚsrQ  r¥   rr   rr   rs   rX     s    	rX   c                   C   s   t jd jS )z+Return updated psutil.PROCFS_PATH constant.r¬   )ÚsysÚmodulesZPROCFS_PATHrr   rr   rr   rs   Úget_procfs_path  s    r]  c                 C   s   | j ttdS )N)r:  r;  )Údecoder4   r5   ©rZ  rr   rr   rs   r^  %  s    r^  c                 C   s   | S r×   rr   r_  rr   rr   rs   r^  (  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>  )Úfilera  rr   rr   rs   r\   1  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32Z91Z33Z93Z34Z35Z36Z37Z30)	ÚgreenÚredÚbrownÚyellowÚblueÚvioletZ	lightblueZgreyZdarkgreyZ29Nz#invalid color %r; choose between %sÚ1z[%sm%s[0mú;)r\   rU  rÚ   r  Úlistr#  r*  rÁ   )rZ  ÚcolorÚboldÚattrr`  rr   rr   rs   r[   @  s"    ÿ
ÿ

r[   c              	   C   s
  t ƒ st| |d nòtr.tt| ||ƒ|d nØd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 rÀdnd}	|j|_||	ƒ}
||
|ƒ zt| |d W ||
|ƒ n||
|ƒ 0 dS )z$Print a colorized version of string.©rc  r   Né   rl   r   é   )rd  re  rf  rg  z#invalid color %r; choose between %ré   iôÿÿÿiõÿÿÿ)r\   Úprintr   r[   ÚctypesZwindllZKernel32ÚGetStdHandleÚSetConsoleTextAttributerU  rÚ   r  rl  r#  r[  ÚstderrZc_ulongÚrestype)rZ  rm  rn  rc  ru  ZDEFAULT_COLORrv  rw  r`  Z	handle_idÚhandlerr   rr   rs   r]   S  s4    
ÿÿ
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]> %srp  )r   ÚinspectÚgetframeinfoÚcurrentframeÚf_backÚ
isinstancer>  rð   rB  ÚEnvironmentErrorrt  r[  rx  )r¿   r{  r8  ÚlinenoÚ	func_nameÚlinesÚindexrr   rr   rs   rZ   v  s    ÿ

ÿrZ   )N)N)rF  )NF)’rÉ   Ú
__future__r   r   r­   rú   rñ   rä   rî   rø   rï   r[  r  r  r   r   r   r   r   ÚImportErrorr	   Úversion_infor  r<  ÚboolÚgetenvr   Úobjectr@  Ú__all__r…   r   r   ÚplatformÚ
startswithr   r   r   r   r   r   r   r   ZAIXr*   r+   r'   r,   r.   r2   r&   r0   r1   r(   r)   r/   r-   r3   r   r!   r    r   r   r"   r   r   r   r   r   r   r#   r$   r%   ÚIntEnumrn   ÚglobalsÚupdateÚ__members__rw   rx   rv   Úgetfilesystemencodingr4   r5   Úgetfilesystemencodeerrorsrç   rG   rC   rA   rB   rD   rH   r?   rE   rF   r@   r”   r˜   rœ   r   r7   r<   r=   r>   r9   r:   r;   r8   r6   r¦   rI   r>  r«   rÊ   rÏ   rÐ   rÑ   rO   rL   rí   rK   rN   rP   rM   rQ   rR   rY   rJ   r  rS   r2  rã   r1  r7  rU   rT   rV   rW   rX   r]  r^  Ústdoutr\   r[   r]   rZ   rr   rr   rr   rs   Ú<module>   s`  


%

	


ÿÿÿÿÿ	

ø


þ
ÿ
!
 ?

W	

	
ÿ
#