
Gq]c        I   @   s"	  d  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 m Z d d l m Z d d l m Z d d l m Z d d l m Z y d d	 l m Z Wn e k
 r d Z n Xy d d
 l m Z Wn e k
 r-d Z n Xe	 j d k rLd d l Z n d Z e	 j d d k Z d d d d d d d d d d d d d d d d d d d  d! d" d# d$ d% d& d' d( d) d* d+ d, d- d. d/ d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d: d; d< d= d> d? d@ dA dB dC dD dE dF dG dH dI dJ dK dL dM dN dO dP dQ dR dS dT dU dV gI Z e j dW k Z e j dX k Z e	 j j dY  Z e	 j j dZ  Z  e  Z! e	 j j d[  Z" e	 j j d\  Z# e	 j j d]  Z$ e" pe# pe$ Z% e	 j j d  Z& e	 j j d`  Z' da Z( db Z) dc Z* dd Z+ de Z, df Z- dg Z. dh Z/ di Z0 dj Z1 dk Z2 dl Z3 dm Z4 dn Z5 do Z6 dp Z7 dq Z8 dr Z9 ds Z: dt Z; du Z< dv Z= dw Z> dx Z? dy Z@ dz ZA e d k rd{ ZB d| ZC d ZD n, d} e jE f d~     YZF eG   jH eF jI  e d k rd ZJ d ZK n, d e jE f d     YZL eG   jH eL jI  e	 jM   ZN e sEd ZO n6 y e	 jP   ZO Wn# eQ k
 rze rqd n d ZO n Xe dI d d d d d d g  ZR e dE d d d d g  ZS e dC d d d d d d g  ZT e dD d d d d g  ZU e dF d d d d d d d d g  ZV e dJ d d d d d g  ZW e dA d d d d d d d g  ZX e dG d d d d d g  ZY e dH d d d d g  ZZ e dB d d d d g  Z[ e d d d d g  Z\ e d d d d d g  Z] e d d d d g  Z^ e d d d g  Z_ e d9 d d d d g  Z` e d> d d g  Za e d? d d d g  Zb e d@ d d d g  Zc e d; d d d g  Zd e d< d d d d g  Ze e d= d d g  Zf e d: d d g  Zg e d8 d d d d d d g  Zh e d d d g  Zi i e e e g e e g f d 6e e g e g f d 6e g e g f d 6e e g e g f d 6e g e g f d 6e e g e e g f d 6e g e e g f d 6e g e e g f d 6Zj e d k	 rej jH i e g e g f d 6e g e g f d 6 n  e d k	 r0ej jH i e g e e g f d 6 n  [ [ [ [ d d  Zk d   Zl d   Zm d   Zn d   Zo el d    Zp d   Zq d   Zr d   Zs d   Zt d d d     YZu d   Zv eu   Zw ew jx ev _x ew jy ev _y d   Zz d   Z{ d d  Z| d   Z} e r	d   Z~ n	 d   Z~ d S(   s9   Common objects shared by __init__.py and _ps*.py modules.i(   t   divisionN(   t   defaultdict(   t
   namedtuple(   t   AF_INET(   t
   SOCK_DGRAM(   t   SOCK_STREAM(   t   AF_INET6(   t   AF_UNIXi   i   i    t   FREEBSDt   BSDt   LINUXt   NETBSDt   OPENBSDt   MACOSt   OSXt   POSIXt   SUNOSt   WINDOWSt   ENCODINGt   ENCODING_ERRSR   t
   CONN_CLOSEt   CONN_CLOSE_WAITt   CONN_CLOSINGt   CONN_ESTABLISHEDt   CONN_FIN_WAIT1t   CONN_FIN_WAIT2t   CONN_LAST_ACKt   CONN_LISTENt	   CONN_NONEt   CONN_SYN_RECVt   CONN_SYN_SENTt   CONN_TIME_WAITt   NIC_DUPLEX_FULLt   NIC_DUPLEX_HALFt   NIC_DUPLEX_UNKNOWNt   STATUS_DEADt   STATUS_DISK_SLEEPt   STATUS_IDLEt   STATUS_LOCKEDt   STATUS_RUNNINGt   STATUS_SLEEPINGt   STATUS_STOPPEDt   STATUS_SUSPENDEDt   STATUS_TRACING_STOPt   STATUS_WAITINGt   STATUS_WAKE_KILLt   STATUS_WAKINGt   STATUS_ZOMBIEt   STATUS_PARKEDt   pconnt	   pcputimest   pctxswt   pgidst   piot   pionicet	   popenfilet   pthreadt   puidst   sconnt	   scpustatst   sdiskiot	   sdiskpartt
   sdiskusaget   snetiot   snicaddrt	   snicstatst   sswapt   susert	   conn_tmapt   deprecated_methodt   isfile_strictt   memoizet   parse_environ_blockt   path_exists_strictt   usage_percentt   supports_ipv6t   sockfam_to_enumt   socktype_to_enumt   wrap_numberst   bytes2humant   posixt   ntt   linuxt   darwint   freebsdt   openbsdt   netbsdt   sunost   solarist   aixt   runningt   sleepings
   disk-sleept   stoppeds   tracing-stopt   zombiet   deads	   wake-killt   wakingt   idlet   lockedt   waitingt	   suspendedt   parkedt   ESTABLISHEDt   SYN_SENTt   SYN_RECVt	   FIN_WAIT1t	   FIN_WAIT2t	   TIME_WAITt   CLOSEt
   CLOSE_WAITt   LAST_ACKt   LISTENt   CLOSINGt   NONEi   i   t	   NicDuplexc           B   s   e  Z d  Z d Z d Z RS(   i   i   i    (   t   __name__t
   __module__R    R!   R"   (    (    (    s-   lib/python2.7/site-packages/psutil/_common.pyRq      s   it   BatteryTimec           B   s   e  Z d  Z d Z RS(   ii(   Rr   Rs   t   POWER_TIME_UNKNOWNt   POWER_TIME_UNLIMITED(    (    (    s-   lib/python2.7/site-packages/psutil/_common.pyRt      s   t   replacet   surrogateescapet   totalt   usedt   freet   percentt   sint   soutt
   read_countt   write_countt
   read_bytest   write_bytest	   read_timet
   write_timet   devicet
   mountpointt   fstypet   optst
   bytes_sentt
   bytes_recvt   packets_sentt   packets_recvt   errint   erroutt   dropint   dropoutt   namet   terminalt   hostt   startedt   pidt   fdt   familyt   typet   laddrt   raddrt   statust   addresst   netmaskt	   broadcastt   ptpt   isupt   duplext   speedt   mtut   ctx_switchest
   interruptst   soft_interruptst   syscallst   scpufreqt   currentt   mint   maxt   shwtempt   labelt   hight   criticalt   sbatteryt   secsleftt   power_pluggedt   sfant   usert   systemt   children_usert   children_systemt   patht   idt	   user_timet   system_timet   realt	   effectivet   savedt   ioclasst   valuet	   voluntaryt   involuntaryt   addrt   ipt   portt   allt   tcpt   tcp4t   udpt   udp4t   inett   inet4t   inet6t   tcp6t   udp6t   unixc         C   sq   y |  | d } Wn; t  k
 rO t |  t  s@ t | t  rF d n d } n X| d k	 ri t | |  S| Sd S(   s5   Calculate percentage usage of 'used' against 'total'.id   g        i    N(   t   ZeroDivisionErrort
   isinstancet   floatt   Nonet   round(   Rz   Ry   t   round_t   ret(    (    s-   lib/python2.7/site-packages/psutil/_common.pyRJ     s    .c            sC   t  j      f d    }   f d   } i    | | _ | S(   s  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             sZ   |  t  t | j     f } y   | SWn) t k
 rU  |  |   }   | <| SXd  S(   N(   t	   frozensett   sortedt   itemst   KeyError(   t   argst   kwargst   keyR   (   t   cachet   fun(    s-   lib/python2.7/site-packages/psutil/_common.pyt   wrapper&  s    c              s     j    d S(   s   Clear cache.N(   t   clear(    (   R   (    s-   lib/python2.7/site-packages/psutil/_common.pyt   cache_clear/  s    (   t	   functoolst   wrapsR   (   R   R   R   (    (   R   R   s-   lib/python2.7/site-packages/psutil/_common.pyRG     s
    !		c            sF   t  j      f d    } d   } d   } | | _ | | _ | S(   s  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            sW   y |  j    } Wn? t k
 r+   |   St k
 rR   |   } |  j    <n X| S(   N(   t   _cachet   AttributeErrorR   (   t   selfR   (   R   (    s-   lib/python2.7/site-packages/psutil/_common.pyR   R  s    
c         S   s   i  |  _  d S(   sj   Activate cache. Expects a Process instance. Cache will be
        stored as a "_cache" instance attribute.N(   R   (   t   proc(    (    s-   lib/python2.7/site-packages/psutil/_common.pyt   cache_activate`  s    c         S   s"   y
 |  `  Wn t k
 r n Xd S(   s   Deactivate and clear cache.N(   R   R   (   R   (    (    s-   lib/python2.7/site-packages/psutil/_common.pyt   cache_deactivatee  s    
(   R   R   R   R   (   R   R   R   R   (    (   R   s-   lib/python2.7/site-packages/psutil/_common.pyt   memoize_when_activated8  s    				c         C   s_   y t  j |   } Wn5 t k
 rJ } | j t j t j f k rF   n  t SXt j | j  Sd S(   s   Same as os.path.isfile() but does not swallow EACCES / EPERM
    exceptions, see:
    http://mail.python.org/pipermail/python-dev/2012-June/120787.html
    N(	   t   ost   statt   OSErrort   errnot   EPERMt   EACCESt   Falset   S_ISREGt   st_mode(   R   t   stt   err(    (    s-   lib/python2.7/site-packages/psutil/_common.pyRF   q  s    c         C   sQ   y t  j |   Wn5 t k
 rH } | j t j t j f k rD   n  t SXt Sd S(   s   Same as os.path.exists() but does not swallow EACCES / EPERM
    exceptions, see:
    http://mail.python.org/pipermail/python-dev/2012-June/120787.html
    N(   R   R   R   R   R   R   R   t   True(   R   R   (    (    s-   lib/python2.7/site-packages/psutil/_common.pyRI     s    c          C   sv   t  j s t d k r t Sy@ t  j  t t  j  }  t j |    |  j d  Wd QXt	 SWn t  j
 k
 rq t SXd S(   s2   Return True if IPv6 is supported on this platform.s   ::1i    N(   s   ::1i    (   t   sockett   has_ipv6R   R   R   R   t
   contextlibt   closingt   bindR   t   error(   t   sock(    (    s-   lib/python2.7/site-packages/psutil/_common.pyRK     s    c         C   s   i  } d } t  } x t r |  j d |  } | | k r= Pn  |  j d | |  } | | k r |  | | !} |  | d | !} | r | j   } n  | | | <n  | d } q W| S(   sC   Parse a C environ block of environment variables into a dictionary.i    s    t   =i   (   R   R   t   findt   upper(   t   dataR   t   post   WINDOWS_t   next_post	   equal_posR   R   (    (    s-   lib/python2.7/site-packages/psutil/_common.pyRH     s     	c         C   s@   t  d k r |  Sy t j |   SWn t t f k
 r; |  SXd S(   s   Convert a numeric socket family value to an IntEnum member.
    If it's not a known member, return the numeric value itself.
    N(   t   enumR   R   t   AddressFamilyt
   ValueErrorR   (   t   num(    (    s-   lib/python2.7/site-packages/psutil/_common.pyRL     s    c         C   s@   t  d k r |  Sy t j |   SWn t t f k
 r; |  SXd S(   s   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   R   t   AddressTypeR
  R   (   R  (    (    s-   lib/python2.7/site-packages/psutil/_common.pyRM     s    c            s     f d   } | S(   s   A decorator which can be used to mark a method as deprecated
    'replcement' is the method name which will be called instead.
    c            sS   d |  j   f   |  j d  k r.   |  _ n  t j |      f d    } | S(   Ns8   %s() is deprecated and will be removed; use %s() insteadc            s/   t  j   d t d d t |    | |   S(   Nt   categoryt
   stackleveli   (   t   warningst   warnt   DeprecationWarningt   getattr(   R   R   R   (   t   msgt   replacement(    s-   lib/python2.7/site-packages/psutil/_common.pyt   inner  s    (   Rr   t   __doc__R   R   R   (   R   R  (   R  (   R  s-   lib/python2.7/site-packages/psutil/_common.pyt   outer  s    !(    (   R  R  (    (   R  s-   lib/python2.7/site-packages/psutil/_common.pyRE     s    t   _WrapNumbersc           B   sG   e  Z d  Z d   Z d   Z d   Z d   Z d d  Z d   Z	 RS(   sN   Watches numbers so that they don't overflow and wrap
    (reset to zero).
    c         C   s.   t  j   |  _ i  |  _ i  |  _ i  |  _ d  S(   N(   t	   threadingt   Lockt   lockR   t	   reminderst   reminder_keys(   R   (    (    s-   lib/python2.7/site-packages/psutil/_common.pyt   __init__  s    		c         C   sv   | |  j  k s t  | |  j k s* t  | |  j k s? t  | |  j  | <t t  |  j | <t t  |  j | <d  S(   N(   R   t   AssertionErrorR  R  R   t   intt   set(   R   t
   input_dictR   (    (    s-   lib/python2.7/site-packages/psutil/_common.pyt	   _add_dict  s    c         C   s|   |  j  | } t | j    t | j    } xF | D]> } x' |  j | | D] } |  j | | =qN W|  j | | =q6 Wd S(   s   In case the number of keys changed between calls (e.g. a
        disk disappears) this removes the entry from self.reminders.
        N(   R   R!  t   keysR  R  (   R   R"  R   t   old_dictt	   gone_keyst   gone_keyt   remkey(    (    s-   lib/python2.7/site-packages/psutil/_common.pyt   _remove_dead_reminders  s    "c         C   sT  | |  j  k r# |  j | |  | S|  j | |  |  j  | } i  } x | j   D] } | | } y | | } Wn t k
 r | | | <qS n Xg  } x t t |   D] }	 | |	 }
 | |	 } | |	 f } |
 | k  r|  j | | c | 7<|  j | | j	 |  n  | j
 |
 |  j | |  q Wt |  | | <qS W| |  j  | <| S(   sk   Cache dict and sum numbers which overflow and wrap.
        Return an updated copy of `input_dict`
        (   R   R#  R)  R$  R   t   ranget   lenR  R  t   addt   appendt   tuple(   R   R"  R   R%  t   new_dictR   t   input_tuplet	   old_tuplet   bitst   it   input_valuet	   old_valueR(  (    (    s-   lib/python2.7/site-packages/psutil/_common.pyt   run  s2    



 c         C   s   |  j  t | d k r@ |  j j   |  j j   |  j j   n9 |  j j | d  |  j j | d  |  j j | d  Wd QXd S(   s>   Clear the internal cache, optionally only for function 'name'.N(   R  R   R   R   R  R  t   pop(   R   R   (    (    s-   lib/python2.7/site-packages/psutil/_common.pyR   *  s    
c         C   s*   |  j   |  j |  j |  j f SWd QXd S(   s5   Return internal cache dicts as a tuple of 3 elements.N(   R  R   R  R  (   R   (    (    s-   lib/python2.7/site-packages/psutil/_common.pyt
   cache_info6  s    
N(
   Rr   Rs   R  R  R#  R)  R6  R   R   R8  (    (    (    s-   lib/python2.7/site-packages/psutil/_common.pyR    s   				'c         C   s$   t  j  t  j |  |  SWd QXd S(   s   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(   t   _wnR  R6  (   R"  R   (    (    s-   lib/python2.7/site-packages/psutil/_common.pyRN   <  s    
c         K   s   t  |  d |  S(   Nt   rb(   t   open(   t   fnameR   (    (    s-   lib/python2.7/site-packages/psutil/_common.pyt   open_binaryJ  s    c         K   s9   t  r) | j d t  | j d t  n  t |  d |  S(   s   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').
    t   encodingt   errorst   rt(   t   PY3t
   setdefaultR   R   R;  (   R<  R   (    (    s-   lib/python2.7/site-packages/psutil/_common.pyt	   open_textN  s    s   %(value).1f%(symbol)sc      	   C   s   d } i  } x4 t  | d
  D]" \ } } d
 | d
 d >| | <q WxG t | d
  D]5 } |  | | k rT t |   | | } | t   SqT W| t d | d d |   S(   s   Used by various scripts. See:
    http://goo.gl/zeJZl

    >>> bytes2human(10000)
    '9.8K'
    >>> bytes2human(100001221)
    '95.4M'
    t   Bt   Kt   Mt   Gt   Tt   Pt   Et   Zt   Yi   i
   t   symboli    R   (	   RD  RE  RF  RG  RH  RI  RJ  RK  RL  (   t	   enumeratet   reversedR   t   localst   dict(   t   nt   formatt   symbolst   prefixR3  t   sRM  R   (    (    s-   lib/python2.7/site-packages/psutil/_common.pyRO   \  s    	c           C   s   t  j d j S(   s+   Return updated psutil.PROCFS_PATH constant.t   psutil(   t   syst   modulest   PROCFS_PATH(    (    (    s-   lib/python2.7/site-packages/psutil/_common.pyt   get_procfs_pathp  s    c         C   s   |  j  d t d t  S(   NR>  R?  (   t   decodeR   R   (   RV  (    (    s-   lib/python2.7/site-packages/psutil/_common.pyR\  v  s    c         C   s   |  S(   N(    (   RV  (    (    s-   lib/python2.7/site-packages/psutil/_common.pyR\  y  s    (   i   i   (   RW   RX   (    (   R  t
   __future__R    R   R   R   R   R   R   RX  R  R  t   collectionsR   R   R   R   R   R   t   ImportErrorR   R   t   version_infoR  RA  t   __all__R   R   R   t   platformt
   startswithR
   R   R   R   R   R   R	   R   t   AIXR'   R(   R$   R)   R+   R/   R#   R-   R.   R%   R&   R,   R*   R0   R   R   R   R   R   R   R   R   R   R   R   R   R    R!   R"   t   IntEnumRq   t   globalst   updatet   __members__Ru   Rv   Rt   t   getfilesystemencodingR   R   t   getfilesystemencodeerrorsR   RB   R>   R<   R=   R?   RC   R:   R@   RA   R;   R   R   R   R   R2   R7   R8   R9   R4   R5   R6   R3   R1   R   RD   RJ   RG   R   RF   RI   RK   RH   RL   RM   RE   R  RN   R9  R   R8  R=  RC  RO   R[  R\  (    (    (    s-   lib/python2.7/site-packages/psutil/_common.pyt   <module>   s`  

											
			 	9						W						