????

Your IP : 18.220.222.38


Current Path : /proc/self/root/lib64/python3.6/site-packages/psutil/tests/__pycache__/
Upload File :
Current File : //proc/self/root/lib64/python3.6/site-packages/psutil/tests/__pycache__/__init__.cpython-36.pyc

3

��JZ��L@s�dZddlmZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl
mZddl
mZddl
mZddl
mZddlZddlmZdd	lmZdd
lmZddlmZddl m!Z!dd
l"m#Z#ddl"m$Z$ddl"m%Z%ddl"m&Z&ej'd�k�rjddl(Z)nddl)Z)yddl)m*Z*Wne+k
�r�ddl*Z*YnXej'd�k�r�ddl,Z,ndZ,ddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYgDZ-ej.d"��pZdZd�kZ/d]ej0kZ1e�rpd�ndZ2e3ej4j5d#��Z6e3ej4j5d��Z7d_Z8d�Z9dZ:ej.db��s�e/�r�dcndZ;e6�s�e7�r�e8d9Z8e:d9Z:ddZ<ej=j>ej=j?ej@��e<�ZAeAdeZBeAe$df�ZCejD�jE�d�kZFej=jGej=j>ej=jHeI�didi��ZJej=j>eJdj�ZKej=jGej=jHeI��ZLeMejNdk�ZOeMedl�ZPe�ozeZQeMejNdm�ZReMejNdn�ZSeMejNdo�ZTdpejN�jU�jVkZWeMejNdq�ZXeMejNdr�ZYeMejNds�ZZeMejNdt�Z[eMedu�Z\e\�o�ej]�Z^eMedv�Z_eMedw�Z`dxdy�Zaea�Zbecejddz�Zed{d|�efe�D�Zgehe
d}ei��Zjehe
d~ei��Zkel�Zmel�Znel�Zoejpdd���Zqejpd�d���ZrGd�d��d�ejs�Ztd�d��Zueud�d�d5��Zveud�d7��Zwd�d6�Zxeud�d3��Zyeud�d���Zzd�d�d4�Z{d�dH�Z|d�dG�Z}Gd�d��d�ei�Z~e~ejde:d�d��d�dJ��Z�e~e�e�fde:d�d��d�d�dK��Z�e~e�de:d�d��d�dI��Z�d�dB�Z�d�d��Z�ej�d�dA��Z�d�d�dC�Z�e<dZfd�dF�Z�Gd�d��d�e)j��Z�e�e)_�d�d��Z�d�d=�Z�d�d>�Z�d�d<�Z�e8fd�d;�Z�d�d�d9�Z�d�d�d:�Z�d�d�dN�Z�ej�d�d�dO��Z�eedfd�dP�Z�e
jfd�dQ�Z�d�d�dR�Z�d�dS�Z�ej�d�dT��Z�d�dM�Z�d�dL�Z�d�dU�Z�d�dV�Z�d�dW�Z�d�dY�Z�e�r�ej�e<fd�dX��Z�nej�e<fd�dX��Z�dS)�z
Test utilities.
�)�print_functionN)�AF_INET)�AF_INET6)�
SOCK_DGRAM)�SOCK_STREAM)�OSX)�POSIX)�SUNOS)�WINDOWS)�
supports_ipv6)�PY3)�u)�unicode)�which��)�mock���APPVEYOR�DEVNULL�GLOBAL_TIMEOUT�MEMORY_TOLERANCE�
NO_RETRIES�PYPY�
PYTHON_EXE�ROOT_DIR�SCRIPTS_DIR�TESTFILE_PREFIX�TESTFN�TESTFN_UNICODE�TOX�TRAVIS�VALID_PROC_STATUSES�	VERBOSITY�HAS_CPU_AFFINITY�HAS_CPU_FREQ�HAS_ENVIRON�HAS_PROC_IO_COUNTERS�
HAS_IONICE�HAS_MEMORY_MAPS�HAS_PROC_CPU_NUM�
HAS_RLIMIT�HAS_SENSORS_BATTERY�HAS_BATTERY�HAS_SENSORS_FANS�HAS_SENSORS_TEMPERATURES�HAS_MEMORY_FULL_INFO�pyrun�
reap_children�get_test_subprocess�create_zombie_proc�create_proc_children_pairZThreadTaskunittest�skip_on_access_denied�skip_on_not_implemented�retry_before_failing�run_test_module_by_name�	get_suite�	run_suiteZinstall_pipZinstall_test_deps�chdir�safe_rmpath�
create_exeZdecode_pathZencode_path�unique_filename�
get_winver�get_kernel_version�
call_until�wait_for_pid�
wait_for_file�check_connection_ntuple�check_net_address�
get_free_port�unix_socket_path�bind_socket�bind_unix_socket�tcp_socketpair�unix_socketpair�create_sockets�
reload_module�import_module_by_path�warn�copyload_shared_lib�
is_namedtuple��1�trueZ__pypy__��
i�iZSILENT�z$testfnz	-internalu-ƒőő�ascii�us-asciiz..�scriptsZcpu_affinityZcpu_freq�environZio_countersZioniceZuss�memory_mapsZcpu_numZrlimitZthreads�sensors_batteryZsensors_fansZsensors_temperaturescCs�dd�}trb|tj�pP|tjjtj��pP|tdtjdd���pP|tj	�j
��}|s^td��|Stjjtj�}tjj|�s�t
|��|SdS)NcSs:ytj|dgtjtjd�Wntk
r0dSX|SdS)Nz-V)�stdout�stderr)�
subprocess�
check_call�PIPE�	Exception)�exe�rg� /usr/lib64/python3.6/__init__.py�attempt�sz_get_py_exe.<locals>.attemptzpython%s.%srz"can't find python exe real abspath)r�sys�
executable�os�path�realpathr�version_info�psutil�Processrf�
ValueError�exists�AssertionError)rirfrgrgrh�_get_py_exe�s	
ruzr+cCs g|]}|jd�rtt|��qS)ZSTATUS_)�
startswith�getattrrp)�.0�xrgrgrh�
<listcomp>�srz�AF_UNIX�SOCK_SEQPACKETcCs�tj�xbtjtd��D]P}t|t�r0tt�}nt}|j|�ryt	|�Wqt
k
rftj�YqXqWx6t
D].}yt	|�Wqrt
k
r�tj�YqrXqrWdS)N�.)r�closerl�listdirr
�
isinstancerrrvr>re�	traceback�	print_exc�_testfiles_created)�name�prefixrmrgrgrh�_cleanup_files�s



r�cCstdd�dS)NT)�	recursive)r3rgrgrgrh�_cleanup_procs�sr�c@sHeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dS)�
ThreadTaskz6A thread task which does nothing expect staying alive.cCs&tjj|�d|_d|_tj�|_dS)NFg����MbP?)�	threading�Thread�__init__�_running�	_intervalZEvent�_flag)�selfrgrgrhr��szThreadTask.__init__cCs|jj}d||jt|�fS)Nz<%s running=%s at %#x>)�	__class__�__name__r��id)r�r�rgrgrh�__repr__�szThreadTask.__repr__cCs|j�|S)N)�start)r�rgrgrh�	__enter__�szThreadTask.__enter__cOs|j�dS)N)�stop)r��args�kwargsrgrgrh�__exit__�szThreadTask.__exit__cCs(|jrtd��tjj|�|jj�dS)zStart thread and keep it running until an explicit
        stop() request. Polls for shutdown every 'timeout' seconds.
        zalready startedN)r�rrr�r�r�r��wait)r�rgrgrhr�szThreadTask.startcCs,d|_|jj�x|jr&tj|j�qWdS)NT)r�r��set�time�sleepr�)r�rgrgrh�runs
zThreadTask.runcCs |jstd��d|_|j�dS)z8Stop thread execution and and waits until it is stopped.zalready stoppedFN)r�rr�join)r�rgrgrhr�szThreadTask.stopN)r��
__module__�__qualname__�__doc__r�r�r�r�r�r�r�rgrgrgrhr��s	r�cstj���fdd��}|S)Ncs,y
�||�Stk
r&t��YnXdS)N)rer3)r�r�)�funrgrh�wrappers

z _cleanup_on_err.<locals>.wrapper)�	functools�wraps)r�r�rg)r�rh�_cleanup_on_errsr�cKs�|jdt�|jdt�|jdtj��|jdtj�trF|jdd�|dkr�tt�dt}td	|g}t	j
|f|�}tj|�t
td
d
d�n"t	j
|f|�}tj|�t|j�|S)a{Creates a python subprocess which does nothing for 60 secs and
    return it as subprocess.Popen instance.
    If "cmd" is specified that is used instead of python.
    By default stdin and stdout are redirected to /dev/null.
    It also attemps to make sure the process is in a reasonably
    initialized state.
    The process is registered for cleanup on reap_children().
    �stdinr`�cwd�env�
creationflagsiNz:from time import sleep;open(r'%s', 'w').close();sleep(60);z-cT)�delete�empty)�
setdefaultrrl�getcwdr]r
r>�_TESTFNrrb�Popen�_subprocesses_started�addrErD�pid)�cmd�kwdsZpylineZsprocrgrgrhr4)s$




cCs�tjjt�d}tjd|tf�}tr4t|dd�}nt|�}t	j
|j�}t|ddd�}tj
|�t|�}tj|�t	j
|�}||fS)aCreate a subprocess which creates another one as in:
    A (us) -> B (child) -> C (grandchild).
    Return a (child, grandchild) tuple.
    The 2 processes are fully initialized and will live for 60 secs
    and are registered for cleanup on reap_children().
    �2a        import subprocess, os, sys, time
        s = "import os, time;"
        s += "f = open('%s', 'w');"
        s += "f.write(str(os.getpid()));"
        s += "f.close();"
        s += "time.sleep(60);"
        subprocess.Popen(['%s', '-c', s])
        time.sleep(60)
        r)r�F)r�r�)rlrm�basenamer��textwrap�dedentrr
r2rprqr�rE�remove�int�
_pids_startedr�)Z_TESTFN2�s�subpZchild1�dataZ
child2_pidZchild2rgrgrhr6Js	


cs�tjs
t�trtjtd�nt}tj	d|�}t
jtjtj
����}|jt�|j|�|jd�t|�|j�\}}zNtj|j�gggt�t|jd��}tj|�tj|��t�fdd�d�|S|j�XWdQRXdS)	z+Create a zombie process and return its PID.)r�a        import os, sys, time, socket, contextlib
        child_pid = os.fork()
        if child_pid > 0:
            time.sleep(3000)
        else:
            # this is the zombie process
            s = socket.socket(socket.AF_UNIX)
            with contextlib.closing(s):
                s.connect('%s')
                if sys.version_info < (3, ):
                    pid = str(os.getpid())
                else:
                    pid = bytes(str(os.getpid()), 'ascii')
                s.sendall(pid)
        rYics�j�S)N)�statusrg)�zprocrgrh�<lambda>�sz$create_zombie_proc.<locals>.<lambda>zret == psutil.STATUS_ZOMBIEN)rprrtr�tempfile�mktemprrr�r��
contextlib�closing�socketr{Z
settimeoutr�bind�listenr2�accept�select�filenor�Zrecvr�r�rqrCr~)Z	unix_file�src�sock�conn�_Zzpidrg)r�rhr5ms$






c
Ksr|jdd�|jdd�tjtddd��@}tj|j�|j|�|j�t	t
|jgf|�}t|j�WdQRX|S)zeRun python 'src' code string in a separate interpreter.
    Returns a subprocess.Popen instance.
    r`Nra�wtF)r��moder�)
r�r��NamedTemporaryFilerr�r�r��write�flushr4rrDr�)r�r��fr�rgrgrhr2�s
cKs�t|ttf�rdnd}tr"|r"dnd}|jd|�|jdtj�|jdtj�|jdd�|jd	|�tj|f|�}tj	|�|j
�\}}|jdkr�t|��|r�t
|�|jd
�r�|dd
�}|S)zUrun cmd in a subprocess and return its output.
    raises RuntimeError on error.
    TFir�shellr`raZuniversal_newlinesr��
NrY���)r��strrr
r�rbrdr�r�r�Zcommunicate�
returncode�RuntimeErrorrQ�endswith)r�r�r��flags�pr`rargrgrh�sh�s"


r�Fc	'Cs*dd�}|r"ttj�jdd��}nt�}x�tr�tj�}tj|j�y|j	�Wn0t
k
r~}z|jtjkrn�WYdd}~XnX|j
r�|j
j�|jr�|jj�z|jr�|jj�Wdy|j�Wn0t
k
r�}z|jtjkr�WYdd}~XnXXq*WxLt�rFtj�}ytj|�}Wn tjk
�r8||�Yq�X|j|�q�W|�r&x4|D],}y|j	�Wntjk
�r|YnX�qTWtj|td�\}}x@|D]8}td|�y|j�Wntjk
�r�YnX�q�Wtj|td�\}}|�rx|D]}td|��q�Wx|D]}||j��qWdS)	a#Terminate and wait() any subprocess started by this test suite
    and ensure that no zombies stick around to hog resources and
    create problems  when looking for refleaks.

    If resursive is True it also tries to terminate and wait()
    all grandchildren started by this process.
    cSsttj|�st|��|tj�ks(t|��y tj|�}|j�sFt|��Wntjk
r^YnXdsptd|��dS)Nrzpid %s is not gone)rpZ
pid_existsrtZpidsrqZ
is_running�
NoSuchProcess)r�r�rgrgrh�assert_gone�s
z"reap_children.<locals>.assert_goneT)r�N)�timeoutz0couldn't terminate process %r; attempting kill()zprocess %r survived kill())r�rprq�childrenr��popr�r�r�Z	terminate�OSError�errnoZESRCHr`r~rar�r�ZECHILDr�Z
wait_procsrrQ�kill)	r�r�r�r��errr�r�Zgone�alivergrgrhr3�sd





cCs�tstd��d}tj�d}x(|D] }|j�s6|dkr@||7}q"Pq"W|sVtd|��d}d}|jd�}t|d�}t|�dkr�t|d�}t|�dkr�t|d�}|||fS)	z"Return a tuple such as (2, 6, 36).z	not POSIXrTrr}zcan't parse %rrrYr)	r�NotImplementedErrorrl�uname�isdigitrr�splitr��len)r�r��c�minor�microZnums�majorrgrgrhrBs&


cCsdtstd��tj�}t|d�r*|jp&d}n(tjd|d�}|rNt|j	d��}nd}|d|d|fS)Nznot WINDOWS�service_pack_majorrz\s\d$rrY)
r
r�rjZgetwindowsversion�hasattrr��re�searchr��group)ZwvZsp�rrgrgrhrA3s
c@s@eZdZdZeddddd�fdd�Zdd	�Zd
d�Zdd
�ZdS)�retryzA retry decorator.Ng����MbP?cCst|tjd�S)N)�file)�printrjra)r�rgrgrhr�Oszretry.<lambda>cCs2|r|rtd��||_||_||_||_||_dS)Nz/timeout and retries args are mutually exclusive)rr�	exceptionr��retries�interval�logfun)r�r�r�rrrrgrgrhr�Jszretry.__init__ccs`|jr.tj�|j}xFtj�|kr*dVqWn.|jrPx&t|j�D]
}dVq@Wnx
dVqRWdS)N)r�r�r�range)r�Zstop_atr�rgrgrh�__iter__Yszretry.__iter__cCs|jdk	rtj|j�dS)N)rr�r�)r�rgrgrhr�es
zretry.sleepcs"tj����fdd��}�|_|S)Ncstd}x^�D]V}y
�||�S�jk
r^}z(|}�jdk	rD�j|��j�w
WYdd}~Xq
Xq
Wtrn|�n�dS)N)r�rr�r)r�r��excr�)r�r�rgrhr�js



zretry.__call__.<locals>.wrapper)r�r��	decorator)r�r�r�rg)r�r�rh�__call__iszretry.__call__)	r�r�r�r�rer�rr�rrgrgrgrhr�Gs
r�g����MbP?)r�rr�rcCstj|�trtjd�dS)z�Wait for pid to show up in the process list then return.
    Used in the test suite to give time the sub process to initialize.
    g{�G�z�?N)rprqr
r�r�)r�rgrgrhrD�s
Tc	Cs<t|d��}|j�}WdQRX|s*|s*t�|r8tj|�|S)z8Wait for a file to be written on disk with some content.�rbN)�open�readrtrlr�)Zfnamer�r�r�r�rgrgrhrE�s
cCs|�}t|�st�|S)zVKeep calling function for timeout secs and exit if eval()
    expression is True.
    )�evalrt)r��expr�retrgrgrhrC�scCsfy0tj|�}tj|j�r$tj|�n
tj|�Wn0tk
r`}z|jtjkrP�WYdd}~XnXdS)z>Convenience function for removing temporary test files or dirsN)	rl�stat�S_ISDIR�st_mode�rmdirr�r�r��ENOENT)rm�str�rgrgrhr>�s
cCsDytj|�Wn0tk
r>}z|jtjkr.�WYdd}~XnXdS)z-Convenience function for creating a directoryN)rl�mkdirr�r�ZEEXIST)�dirr�rgrgrh�
safe_mkdir�s
rccs.tj�}ztj|�dVWdtj|�XdS)z@Context manager which temporarily changes the current directory.N)rlr�r=)�dirname�curdirrgrgrhr=�s


cCs�tjj|�st|��|r�td�s*td��t|t�r>tj	d�}t|t
�sPt|��tjdddd��}|j
|�WdQRXztjd|jd	|g�Wdt|j�Xn.tjt|�tr�tj|�}tj||jtjB�dS)
z1Creates an executable file in the given location.�gcczgcc is not installedz�
                #include <unistd.h>
                int main() {
                    pause();
                    return 1;
                }
                z.cFr�)�suffixr�r�Nz-o)rlrmrsrtrrrr��boolr�r�r�r�r�r�rbrcr�r>�shutil�copyfilerrr�chmodr�S_IEXEC)ZoutpathZc_coder�rrgrgrhr?�s$

cCstj||d�S)N)r�r)r�r�)r�rrgrgrhr@�sc@s(eZdZdd�Zeejd�s$ejjZdS)�TestCasecCsd|jj|jj|jfS)Nz%s.%s.%s)r�r�r�Z_testMethodName)r�rgrgrh�__str__�szTestCase.__str__�assertRaisesRegexN)	r�r�r�r!r��unittestr ZassertRaisesRegexpr"rgrgrgrhr �sr cCs$dtjkrdtjd<tjjj�dS)NZPSUTIL_TESTINGrU)rlr]rpZ_psplatformZcextZset_testingrgrgrgrh�_setup_testss

r$cCs`dd�tjt�D�}dtjkr,dd�|D�}tj�}x&|D]}d|}|jtjj|��q:W|S)NcSs<g|]4}|jd�r|jd�r|jd�rtjj|�d�qS)z.pyZtest_Ztest_memory_leaksr)r�rvrlrm�splitext)rxryrgrgrhrzszget_suite.<locals>.<listcomp>ZWHEELHOUSE_UPLOADER_USERNAMEcSsg|]}|jd�s|�qS)�osx�posix�linux)r&r'r()r�)rxryrgrgrhrzszpsutil.tests.%s)	rlr�HEREr]r#�	TestSuite�addTest�defaultTestLoader�loadTestsFromName)Ztestmods�suiteZtmrgrgrhr;
s

cCs8t�tjtd�jt��}|j�}tj|r.dnd�dS)N)�	verbosityrrY)	r$r#�TextTestRunnerr$r�r;�
wasSuccessfulrj�exit)�result�successrgrgrhr<scCsht�tjjtjj|��d}tj�}|jtjj	|��tj
td�j|�}|j
�}tj|r^dnd�dS)Nr)r/rY)r$rlrmr%r�r#r*r+r,r-r0r$r�r1rjr2)r�r.r3r4rgrgrhr:#scCsttd|d�S)zZDecorator which runs a test function and retries N times before
    actually failing.
    N)r�r�r)r�rt)rrgrgrhr9/scs�fdd�}|S)z,Decorator to Ignore AccessDenied exceptions.cstj����fdd��}|S)Ncs>y
�||�Stjk
r8�dk	r*�s*�tjd��YnXdS)Nzraises AccessDenied)rpZAccessDeniedr#�SkipTest)r�r�)r��only_ifrgrhr�9s
z9skip_on_access_denied.<locals>.decorator.<locals>.wrapper)r�r�)r�r�)r6)r�rhr8s	z(skip_on_access_denied.<locals>.decoratorrg)r6rrg)r6rhr76scs�fdd�}|S)z3Decorator to Ignore NotImplementedError exceptions.cstj����fdd��}|S)NcsFy
�||�Stk
r@�dk	r(�s(�d�j}tj|��YnXdS)Nz4%r was skipped because it raised NotImplementedError)r�r�r#r5)r�r��msg)r�r6rgrhr�Is
z;skip_on_not_implemented.<locals>.decorator.<locals>.wrapper)r�r�)r�r�)r6)r�rhrHsz*skip_on_not_implemented.<locals>.decoratorrg)r6rrg)r6rhr8Fs
�	127.0.0.1cCsFtjtj���.}|jtjtjd�|j|df�|j�dSQRXdS)zReturn an unused TCP port.rYrN)r�r�r��
setsockopt�
SOL_SOCKET�SO_REUSEADDRr��getsockname)�hostr�rgrgrhrH]sccsJtjs
t�t|d�}z
|VWdytj|�Wntk
rBYnXXdS)zaA context manager which returns a non-existent file name
    and tries to delete it on exit.
    )rN)rprrtr@rl�unlinkr�)rrmrgrgrhrIes


cCs||dkr|ttfkrd}tj||�}y4|jtjtjd�|j|�|tjkrV|jd�|St	k
rv|j
��YnXdS)zBinds a generic socket.NrTrrYrX)rTr)rrr�r9r:r;r�rr�rer~)�family�type�addrr�rgrgrhrJus


cCsttjs
t�tjj|�s t|��tjtj|�}y"|j|�|tj	krN|j
d�Wntk
rn|j��YnX|S)zBind a UNIX socket.rX)
rprrtrlrmrsr�r{r�rr�rer~)r�r@r�rgrgrhrK�s


cCs�tjtj|t����}|j|�|jd�|j�}tj|t�}y@|j|�|j�}x(|j�\}}||krn||fS|j	�qRWWnt
k
r�|j	��YnXWdQRXdS)z^Build a pair of TCP sockets connected to each other.
    Return a (server, client) tuple.
    rXN)r�r�r�rr�r�r<�connectr�r~r�)r?rAZllr�Zcaddr�argrgrhrL�s 


cCs�tjs
t�d}}y@t|tjd�}|jd�tjtjtj�}|jd�|j|�Wn6t	k
r�|dk	rr|j
�|dk	r�|j
��YnX||fS)z�Build a pair of UNIX sockets connected to each other through
    the same UNIX file name.
    Return a (server, client) tuple.
    N)r@r)rprrtrKr�rZsetblockingr{rBrer~)r�ZserverZclientrgrgrhrM�s


ccs�g}d}}z�|jttjtj��|jttjtj��t�rd|jttjtj��|jttjtj��tr�t	r�t
�j�}t
�j�}t|�\}}t
|tjd�}x|||fD]}|j|�q�W|VWdx|D]}|j�q�W|dk	r�t|�|dk	r�t|�XdS)z1Open as many socket families / types as possible.N)r@)�appendrJr�rrrrrr�HAS_CONNECTIONS_UNIXrIr�rMrKr~r>)ZsocksZfname1Zfname2�s1�s2Zs3r�rgrgrhrN�s,



cCsddl}tr$tr$t|tj�s$t|��|tjkr�dd�|jd�D�}t	|�dksVt|��x,|D]$}d|kordkns\t|��q\Wts�t
|�}|j|�nb|tjkr�t|t
�s�t|��ts�t
|�}|j|�n.|tjkr�tjd|�dk	s�t|��n
td	|��dS)
z[Check a net address validity. Supported families are IPv4,
    IPv6 and MAC addresses.
    rNcSsg|]}t|��qSrg)r�)rxryrgrgrhrz�sz%check_net_address.<locals>.<listcomp>r}r�z([a-fA-F0-9]{2}[:|\-]?){6}zunknown family %r)�	ipaddress�enumrr��IntEnumrtr�rr�r�rZIPv4Addressrr�ZIPv6AddressrpZAF_LINKr��matchrr)rAr?rIZoctsZnumrgrgrhrG�s&

$

c(Cs�t|�dkst|��t|�dk}t|dd�dk}|d|jksBt�|d|jksTt�|d|jksft�|d|jksxt�|d|jks�t�|d	|jks�t�|r�|d|j	ks�t�|�rn|jdks�t|��t
td
�o�t�rnytj
|j|j|j�}Wn>tjtfk
�r2}z|jdtjk�r"�WYdd}~Xn<Xtj|��*|j|jk�sRt�|j|jk�sdt�WdQRX|jtttfk�s�tt|j���|jttfk�r"|jtk�rFtj|j|j�}tj|��Vy|j|jddf�Wn6tjk
�r}z|jtjk�r�WYdd}~XnXWdQRXn$|jtk�rF|jtjk�sFt|j��|jtttfk�sftt|j���|jtk�r�|jtjk�s�t|j��x�|j|jfD]�}|jttfk�rt |t!��s�t|��|�sʐq�t |j"t#��s�t|j"��d|j"k�o�dkn�s
t|j"��t$|j%|j�n |jtk�r�t |t&��s�t|���q�Wt |jt&��sVt|��d
d�t't�D�}|j|k�s|t|��dS)z*Check validity of a connection namedtuple.rWr�fdrYrrrr��fromfdNi��cSs g|]}|jd�rtt|��qS)ZCONN_)rvrwrp)rxryrgrgrhrz=sz+check_connection_ntuple.<locals>.<listcomp>)rWrr�r�)(r�rtrwrMr?r@ZladdrZraddrr�r�r�r�r
rO�errorr�r�r�ZEBADFr�r�rrr{�reprr�Z
EADDRNOTAVAILrpZ	CONN_NONErrr|r��tupleZportr�rGZipr�r)r�Zhas_pidZhas_fdZdupsockr�r�rAZvalidsrgrgrhrF�sf  (cCsLyddl}t|d�st�Wn"tk
r<ddl}|j|�SX|j|�SdS)z,Backport of importlib.reload of Python 3.3+.rN�reload)�	importlibr��ImportError�imprS)�modulerTrVrgrgrhrOFs
cCs�tjjtjj|��d}tjddkr:ddl}|j||�Stjdd�dkrfddlm	}|||�j
�Sddl}|jj
||�}|jj|�}|jj|�|SdS)Nrrrr)�SourceFileLoader)rr)rlrmr%r�rjrorVZload_sourceZimportlib.machineryrX�load_module�importlib.util�util�spec_from_file_location�module_from_spec�loader�exec_module)rmr�rVrXrT�spec�modrgrgrhrPSscCstj|t�dS)zRaise a warning msg.N)�warningsrQ�UserWarning)r7rgrgrhrQhscCsVt|�}|j}t|�dks&|dtkr*dSt|dd�}t|t�sDdStdd�|D��S)z-Check if object is an instance of namedtuple.rYrF�_fieldsNcss|]}t|�tkVqdS)N)r@r�)rx�nrgrgrh�	<genexpr>vsz is_namedtuple.<locals>.<genexpr>)r@�	__bases__r�rRrwr��all)ry�t�br�rgrgrhrSms
c#sfd�tj|�d�}�fdd�tj�j�D�}tj|�}tj||�zt	j
|�|VWdt|�XdS)z�Ctx manager which picks up a random shared CO lib used
        by this process, copies it in another location and loads it
        in memory via ctypes. Return the new absolutized path.
        z.so)r�rcs6g|].}tjj|j�d�krd|jj�kr|j�qS)rY�python)rlrmr%�lower)rxry)�extrgrhrz�sz'copyload_shared_lib.<locals>.<listcomp>N)r�r�rprqr^�random�choicerr�ctypesZCDLLr>)�
dst_prefix�dst�libsr�rg)rmrhrRzs


c	#s�ddlm}ddlm}d�tj|�d�}�fdd�tj�j�D�}tj	|�}t
j||�d}ztj|�}|VWd|dk	r�tj
jj}|jg|_||j�}|dkr�|�t|�XdS)	z�Ctx manager which picks up a random shared DLL lib used
        by this process, copies it in another location and loads it
        in memory via ctypes.
        Return the new absolutized, normcased path.
        r)�wintypes)�WinErrorz.dll)r�rcsPg|]H}tjj|j�dj��krdtjj|j�j�krd|jj�kr|j�qS)rYrkZwow64)rlrmr%rlr�)rxry)rmrgrhrz�sz'copyload_shared_lib.<locals>.<listcomp>N)rprtrur�r�rprqr^rnrorrZWinDLLZwindllZkernel32�FreeLibraryZHMODULEZargtypesZ_handler>)	rqrtrurrrsr��cfilervr
rg)rmrhrR�s$





)rr)rr)rUrV)rWrri�)rZr[)N)F)TF)N)N)N)r8)rT�rTr)rx)�r�Z
__future__r�atexitr�rpr�r�rlrnr�r�rr�rrbrjr�r�r�r�r�rbrrrrrprrr	r
Zpsutil._commonrZpsutil._compatrr
rrroZ	unittest2r#rrUrJ�__all__�getenvr!�builtin_module_namesrZ	WIN_VISTArr]�getr"rrrrr$rrmr�rnr�rr�r �getfilesystemencodingrlZASCII_FS�abspathr�__file__rrr)r�rqr%r&rEr'r(r)Zmemory_full_infordr1r*r+r,ZHAS_THREADSr-r_r.r/r0rurr	�devnullrrr#rw�objectr{r|r�r�r�r��registerr�r�r�r�r�r4r6r5r2r�r3rBrAr�r�rD�EnvironmentErrorrtrErCr>r�contextmanagerr=r?r@r r$r;r<r:r9r7r8rHrIrJrKrLrMrNrGrFrOrPrQrSrRrgrgrgrh�<module>	sN








 




0 #%
_:


	
	



L