
Gq]c           @   s  d  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 g  Z e j d  Z e j Z i e
 j e j 6e
 j e j 6e
 j  e j! 6e
 j" e j# 6e
 j$ e j% 6e
 j& e j' 6e
 j( e j) 6e
 j* e j+ 6e
 j, e j- 6e
 j. e j/ 6e
 j0 e j1 6e
 j2 e j3 6Z4 i e
 j5 e j6 6e
 j7 e j8 6e
 j9 e j: 6e
 j; e j< 6e
 j= e j> 6Z? e@ d d d d d d d d d d d d d d d  d! d" d# d$ d% d& d'  ZA e@ d( d d) d d* d d+ d d, d d- d d. d d/ d!  ZB d ZD d ZE d ZF d ZG e d0 d1 d2 d3 d4 g  ZH e d5 d6 d7 d8 d9 d: d; d< d= g  ZI e d> d* d+ d, d- g  ZJ e d? eJ jK dU  ZL dA   ZM dB   ZN dC   ZO dD   ZP dE   ZQ dF   ZR dG   ZS dH   ZT e jU ZU e jV ZV eW dI  ZX dJ   ZY e jZ ZZ e j[ Z[ dK dL  Z\ dM   Z] dN   Z^ dO   Z_ dP   Z` e ja Za dQ   Zb e jc dR    Zd dS ee f dT     YZf d S(V   s   macOS platform implementation.iN(   t   AF_INET(   t
   namedtuplei   (   t   _common(   t   _psposix(   t   _psutil_osx(   t   _psutil_posix(   t   AF_INET6(   t	   conn_tmap(   t   isfile_strict(   t   memoize_when_activated(   t   parse_environ_block(   t   sockfam_to_enum(   t   socktype_to_enum(   t   usage_percentt   SC_PAGE_SIZEt   ppidi    t   ruidt   euidi   t   suidi   t   rgidi   t   egidi   t   sgidi   t   ttynri   t   ctimei   t   statusi	   t   namei
   t   cpuutimet   cpustimet   rsst   vmst   pfaultst   pageinst
   numthreadst   volctxswt	   scputimest   usert   nicet   systemt   idlet   svmemt   totalt	   availablet   percentt   usedt   freet   activet   inactivet   wiredt   pmemt   pfullmemt   ussc    	   	   C   st   t  j   \ }  } } } } } | | } | | } | | 8} t |  | |  d d } t |  | | | | | | |  S(   s&   System virtual memory as a namedtuple.t   round_i   (   t   cextt   virtual_memR   R'   (	   R(   R-   R.   R/   R,   t   speculativet   availR+   R*   (    (    s,   lib/python2.7/site-packages/psutil/_psosx.pyt   virtual_memoryu   s    


c          C   sL   t  j   \ }  } } } } t | |  d d } t j |  | | | | |  S(   s=   Swap system memory as a (total, used, free, sin, sout) tuple.R3   i   (   R4   t   swap_memR   R   t   sswap(   R(   R+   R,   t   sint   soutR*   (    (    s,   lib/python2.7/site-packages/psutil/_psosx.pyt   swap_memory   s    c          C   s+   t  j   \ }  } } } t |  | | |  S(   s(   Return system CPU times as a namedtuple.(   R4   t	   cpu_timesR"   (   R#   R$   R%   R&   (    (    s,   lib/python2.7/site-packages/psutil/_psosx.pyR>      s    c          C   sU   g  }  xH t  j   D]: } | \ } } } } t | | | |  } |  j |  q W|  S(   s(   Return system CPU times as a named tuple(   R4   t   per_cpu_timesR"   t   append(   t   rett   cpu_tR#   R$   R%   R&   t   item(    (    s,   lib/python2.7/site-packages/psutil/_psosx.pyR?      s    c           C   s
   t  j   S(   s0   Return the number of logical CPUs in the system.(   R4   t   cpu_count_logical(    (    (    s,   lib/python2.7/site-packages/psutil/_psosx.pyRD      s    c           C   s
   t  j   S(   s1   Return the number of physical CPUs in the system.(   R4   t   cpu_count_phys(    (    (    s,   lib/python2.7/site-packages/psutil/_psosx.pyt   cpu_count_physical   s    c          C   s1   t  j   \ }  } } } } t j |  | | |  S(   N(   R4   t	   cpu_statsR   t	   scpustats(   t   ctx_switchest
   interruptst   soft_interruptst   syscallst   traps(    (    s,   lib/python2.7/site-packages/psutil/_psosx.pyRG      s    c          C   s+   t  j   \ }  } } t j |  | |  g S(   s   Return CPU frequency.
    On macOS per-cpu frequency is not supported.
    Also, the returned frequency never changes, see:
    https://arstechnica.com/civis/viewtopic.php?f=19&t=465002
    (   R4   t   cpu_freqR   t   scpufreq(   t   currt   min_t   max_(    (    s,   lib/python2.7/site-packages/psutil/_psosx.pyRN      s    c   	      C   s   g  } t  j   } x | D] } | \ } } } } | d k rF d } n  |  s{ t j j |  s t j j |  r{ q q{ n  t j | | | |  } | j |  q W| S(   s8   Return mounted disk partitions as a list of namedtuples.t   nonet    (	   R4   t   disk_partitionst   ost   patht   isabst   existsR   t	   sdiskpartR@   (	   t   allt   retlistt
   partitionst	   partitiont   devicet
   mountpointt   fstypet   optst   ntuple(    (    s,   lib/python2.7/site-packages/psutil/_psosx.pyRU      s    	&	c          C   s   y t  j   \ }  } } Wn t k
 r- d SX| d k } | rL t j } n" | d k rd t j } n
 | d } t j |  | |  S(   s   Return battery information.i   ii<   N(   R4   t   sensors_batteryt   NotImplementedErrort   NoneR   t   POWER_TIME_UNLIMITEDt   POWER_TIME_UNKNOWNt   sbattery(   R*   t   minsleftt   power_pluggedt   secsleft(    (    s,   lib/python2.7/site-packages/psutil/_psosx.pyRd      s    
t   inetc         C   s   g  } x t    D]y } y t |  j |   } Wn t k
 rE q q X| r x: | D]/ } t |  | g } | j t j |    qS Wq q W| S(   s    System-wide network connections.(   t   pidst   Processt   connectionst   NoSuchProcesst   listR@   R   t   sconn(   t   kindRA   t   pidt   const   c(    (    s,   lib/python2.7/site-packages/psutil/_psosx.pyt   net_connections   s    !c          C   s   t    j   }  i  } x |  D] } y7 t j |  } t j |  } t j |  \ } } Wn+ t k
 r } | j t j k r   q q Xt	 t
 d  r t
 j |  } n  t
 j | | | |  | | <q W| S(   s)   Get NIC stats (isup, duplex, speed, mtu).t	   NicDuplex(   t   net_io_counterst   keyst
   cext_posixt
   net_if_mtut   net_if_flagst   net_if_duplex_speedt   OSErrort   errnot   ENODEVt   hasattrR   Ry   t	   snicstats(   t   namesRA   R   t   mtut   isupt   duplext   speedt   err(    (    s,   lib/python2.7/site-packages/psutil/_psosx.pyt   net_if_stats  s    
 c           C   s
   t  j   S(   s:   The system boot time expressed in seconds since the epoch.(   R4   t	   boot_time(    (    (    s,   lib/python2.7/site-packages/psutil/_psosx.pyR      s    c    	      C   s   g  }  t  j   } xu | D]m } | \ } } } } } | d k rF q n  | sR q n  t j | | pd d | pm d | |  } |  j |  q W|  S(   s:   Return currently connected users as a list of namedtuples.t   ~N(   R4   t   usersR   t   suserRf   R@   (	   R\   t   rawlistRC   R#   t   ttyt   hostnamet   tstampRu   t   nt(    (    s,   lib/python2.7/site-packages/psutil/_psosx.pyR   %  s    'c          C   sw   t  j   }  d |  k rs y$ t d  j   |  j d d  Wqs t k
 rO qs t k
 ro |  j d d  qs Xn  |  S(   Ni    (   R4   Rn   Ro   t   create_timet   insertRq   t   AccessDenied(   t   ls(    (    s,   lib/python2.7/site-packages/psutil/_psosx.pyRn   9  s    c            s"   t  j      f d    } | S(   s`   Decorator which translates bare OSError exceptions into
    NoSuchProcess and AccessDenied.
    c            s   y   |  | |  SWn t  k
 r } | j t j k rP t |  j |  j   n  | j t j t j f k r t |  j |  j   n    n/ t	 j
 k
 r t |  j |  j |  j   n Xd  S(   N(   R   R   t   ESRCHRq   Ru   t   _namet   EPERMt   EACCESR   R4   t   ZombieProcessErrort   ZombieProcesst   _ppid(   t   selft   argst   kwargsR   (   t   fun(    s,   lib/python2.7/site-packages/psutil/_psosx.pyt   wrapperP  s    (   t	   functoolst   wraps(   R   R   (    (   R   s,   lib/python2.7/site-packages/psutil/_psosx.pyt   wrap_exceptionsL  s    c         c   s   y	 d VWn t  t f k
 r } t | t  sB | j t j k r y |  j   } Wn t k
 rk |  q X| t j k r t	 |  j
 |  j |  j   q t |  j
 |  j   q   n Xd S(   s   There are some poor C APIs which incorrectly raise ESRCH when
    the process is still alive or it's a zombie, or even RuntimeError
    (those who don't set errno). This is here in order to solve:
    https://github.com/giampaolo/psutil/issues/1044
    N(   R   t   RuntimeErrort
   isinstanceR   R   R   Rq   R   t   STATUS_ZOMBIER   Ru   R   R   R   (   t   procR   R   (    (    s,   lib/python2.7/site-packages/psutil/_psosx.pyt   catch_zombie_  s    	!
Ro   c           B   s  e  Z d  Z d d d d g Z d   Z e e d     Z e e d     Z d   Z	 d	   Z
 e d
    Z e d    Z e d    Z e d    Z e d    Z e d    Z e d    Z e d    Z e d    Z e d    Z e d    Z e d    Z e d    Z e d    Z e d    Z e d    Z e d d   Z e d    Z e d" d   Z e d    Z e d    Z  e d     Z! e d!    Z" RS(#   s1   Wrapper class around underlying C implementation.Ru   R   R   t   _cachec         C   s   | |  _  d  |  _ d  |  _ d  S(   N(   Ru   Rf   R   R   (   R   Ru   (    (    s,   lib/python2.7/site-packages/psutil/_psosx.pyt   __init__~  s    		c         C   s4   t  j |  j  } t |  t t  k s0 t  | S(   N(   R4   t   proc_kinfo_oneshotRu   t   lent   kinfo_proc_mapt   AssertionError(   R   RA   (    (    s,   lib/python2.7/site-packages/psutil/_psosx.pyt   _get_kinfo_proc  s    c         C   sG   t  |    t j |  j  } Wd  QXt |  t t  k sC t  | S(   N(   R   R4   t   proc_pidtaskinfo_oneshotRu   R   t   pidtaskinfo_mapR   (   R   RA   (    (    s,   lib/python2.7/site-packages/psutil/_psosx.pyt   _get_pidtaskinfo  s    c         C   s$   |  j  j |   |  j j |   d  S(   N(   R   t   cache_activateR   (   R   (    (    s,   lib/python2.7/site-packages/psutil/_psosx.pyt   oneshot_enter  s    c         C   s$   |  j  j |   |  j j |   d  S(   N(   R   t   cache_deactivateR   (   R   (    (    s,   lib/python2.7/site-packages/psutil/_psosx.pyt   oneshot_exit  s    c         C   s4   |  j    t d } | d  k	 r$ | St j |  j  S(   NR   (   R   R   Rf   R4   t	   proc_nameRu   (   R   R   (    (    s,   lib/python2.7/site-packages/psutil/_psosx.pyR     s    c         C   s'   t  |    t j |  j  SWd  QXd  S(   N(   R   R4   t   proc_exeRu   (   R   (    (    s,   lib/python2.7/site-packages/psutil/_psosx.pyt   exe  s    c         C   s'   t  |    t j |  j  SWd  QXd  S(   N(   R   R4   t   proc_cmdlineRu   (   R   (    (    s,   lib/python2.7/site-packages/psutil/_psosx.pyt   cmdline  s    c         C   s-   t  |    t t j |  j   SWd  QXd  S(   N(   R   R
   R4   t   proc_environRu   (   R   (    (    s,   lib/python2.7/site-packages/psutil/_psosx.pyt   environ  s    c         C   s   |  j    t d |  _ |  j S(   NR   (   R   R   R   (   R   (    (    s,   lib/python2.7/site-packages/psutil/_psosx.pyR     s    c         C   s'   t  |    t j |  j  SWd  QXd  S(   N(   R   R4   t   proc_cwdRu   (   R   (    (    s,   lib/python2.7/site-packages/psutil/_psosx.pyt   cwd  s    c         C   s7   |  j    } t j | t d | t d | t d  S(   NR   R   R   (   R   R   t   puidsR   (   R   t   rawtuple(    (    s,   lib/python2.7/site-packages/psutil/_psosx.pyt   uids  s
    c         C   s7   |  j    } t j | t d | t d | t d  S(   NR   R   R   (   R   R   R   R   (   R   R   (    (    s,   lib/python2.7/site-packages/psutil/_psosx.pyt   gids  s
    c         C   sE   |  j    t d } t j   } y | | SWn t k
 r@ d  SXd  S(   NR   (   R   R   R   t   get_terminal_mapt   KeyErrorRf   (   R   t   tty_nrt   tmap(    (    s,   lib/python2.7/site-packages/psutil/_psosx.pyt   terminal  s    c         C   s?   |  j    } t | t d | t d | t d | t d  S(   NR   R   R   R   (   R   R0   R   (   R   R   (    (    s,   lib/python2.7/site-packages/psutil/_psosx.pyt   memory_info  s    c         C   s/   |  j    } t j |  j  } t | | f   S(   N(   R   R4   t   proc_memory_ussRu   R1   (   R   t	   basic_memR2   (    (    s,   lib/python2.7/site-packages/psutil/_psosx.pyt   memory_full_info  s    c         C   s2   |  j    } t j | t d | t d d d  S(   NR   R   g        (   R   R   t	   pcputimesR   (   R   R   (    (    s,   lib/python2.7/site-packages/psutil/_psosx.pyR>     s
    c         C   s   |  j    t d S(   NR   (   R   R   (   R   (    (    s,   lib/python2.7/site-packages/psutil/_psosx.pyR     s    c         C   s$   |  j    t d } t j | d  S(   NR!   i    (   R   R   R   t   pctxsw(   R   t   vol(    (    s,   lib/python2.7/site-packages/psutil/_psosx.pyt   num_ctx_switches  s    c         C   s   |  j    t d S(   NR    (   R   R   (   R   (    (    s,   lib/python2.7/site-packages/psutil/_psosx.pyt   num_threads  s    c         C   s   |  j  d k r g  Sg  } t |    t j |  j   } Wd  QXxB | D]: \ } } t |  rE t j | |  } | j |  qE qE W| S(   Ni    (   Ru   R   R4   t   proc_open_filesR   R   t	   popenfileR@   (   R   t   filesR   RW   t   fdRc   (    (    s,   lib/python2.7/site-packages/psutil/_psosx.pyt
   open_files  s    Rm   c      	   C   sG  | t  k rG t d | d j g  t  D] } t |  ^ q"  f   n  t  | \ } } t |    t j |  j | |  } Wd  QXg  } x | D] } | \ } }	 }
 } } } t | } t	 |	  }	 t
 |
  }
 |	 t t f k r| r t j |   } n  | rt j |   } qn  t j | |	 |
 | | |  } | j |  q W| S(   Ns+   invalid %r kind argument; choose between %ss   , (   R   t
   ValueErrort   joint   reprR   R4   t   proc_connectionsRu   t   TCP_STATUSESR   R   R    R   R   t   addrt   pconnR@   (   R   Rt   t   xt   familiest   typesR   RA   RC   R   t   famt   typet   laddrt   raddrR   R   (    (    s,   lib/python2.7/site-packages/psutil/_psosx.pyRp   	  s(    5
c         C   s:   |  j  d k r d St |    t j |  j   SWd  QXd  S(   Ni    (   Ru   R   R4   t   proc_num_fds(   R   (    (    s,   lib/python2.7/site-packages/psutil/_psosx.pyt   num_fds   s    c         C   s   t  j |  j | |  j  S(   N(   R   t   wait_pidRu   R   (   R   t   timeout(    (    s,   lib/python2.7/site-packages/psutil/_psosx.pyt   wait'  s    c         C   s'   t  |    t j |  j  SWd  QXd  S(   N(   R   R|   t   getpriorityRu   (   R   (    (    s,   lib/python2.7/site-packages/psutil/_psosx.pyt   nice_get+  s    c         C   s*   t  |    t j |  j |  SWd  QXd  S(   N(   R   R|   t   setpriorityRu   (   R   t   value(    (    s,   lib/python2.7/site-packages/psutil/_psosx.pyt   nice_set0  s    c         C   s$   |  j    t d } t j | d  S(   NR   t   ?(   R   R   t   PROC_STATUSESt   get(   R   t   code(    (    s,   lib/python2.7/site-packages/psutil/_psosx.pyR   5  s    c         C   sX   t  j |  j  } g  } x9 | D]1 \ } } } t j | | |  } | j |  q W| S(   N(   R4   t   proc_threadsRu   R   t   pthreadR@   (   R   R   R\   t	   thread_idt   utimet   stimeRc   (    (    s,   lib/python2.7/site-packages/psutil/_psosx.pyt   threads;  s    N(#   t   __name__t
   __module__t   __doc__t	   __slots__R   R   R	   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R>   R   R   R   R   Rp   R   Rf   R   R   R   R   R   (    (    (    s,   lib/python2.7/site-packages/psutil/_psosx.pyRo   y  sD   				
	(   R2   (g   R   t
   contextlibR   R   RV   t   socketR    t   collectionsR   RT   R   R   R   R4   R   R|   R   R   R   R	   R
   R   R   R   t   __extra__all__t   sysconft   PAGESIZEt   AF_LINKt   CONN_ESTABLISHEDt   TCPS_ESTABLISHEDt   CONN_SYN_SENTt   TCPS_SYN_SENTt   CONN_SYN_RECVt   TCPS_SYN_RECEIVEDt   CONN_FIN_WAIT1t   TCPS_FIN_WAIT_1t   CONN_FIN_WAIT2t   TCPS_FIN_WAIT_2t   CONN_TIME_WAITt   TCPS_TIME_WAITt
   CONN_CLOSEt   TCPS_CLOSEDt   CONN_CLOSE_WAITt   TCPS_CLOSE_WAITt   CONN_LAST_ACKt   TCPS_LAST_ACKt   CONN_LISTENt   TCPS_LISTENt   CONN_CLOSINGt   TCPS_CLOSINGt	   CONN_NONEt   PSUTIL_CONN_NONER   t   STATUS_IDLEt   SIDLt   STATUS_RUNNINGt   SRUNt   STATUS_SLEEPINGt   SSLEEPt   STATUS_STOPPEDt   SSTOPR   t   SZOMBR   t   dictR   R   Rf   Rq   R   R   t   TimeoutExpiredR"   R'   R0   t   _fieldsR1   R8   R=   R>   R?   RD   RF   RG   RN   t
   disk_usaget   disk_io_counterst   FalseRU   Rd   Rz   t   net_if_addrsRx   R   R   R   Rn   t
   pid_existsR   t   contextmanagerR   t   objectRo   (    (    (    s,   lib/python2.7/site-packages/psutil/_psosx.pyt   <module>   s   								
															