Viewing File: /usr/lib64/python3.6/site-packages/psutil/tests/__pycache__/__init__.cpython-36.opt-1.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_temperaturescCsxdd�}trb|tj�pP|tjjtj��pP|tdtjdd���pP|tj	�j
��}|s^td��|Stjjtj�}|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)rirfrgrgrh�_get_py_exe�s	
rszr+cCs g|]}|jd�rtt|��qS)ZSTATUS_)�
startswith�getattrrp)�.0�xrgrgrh�
<listcomp>�srx�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
�
isinstancerrrtr>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�trtjtd�nt}tjd|�}tjt	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)Zstatusrg)�zprocrgrh�<lambda>�sz$create_zombie_proc.<locals>.<lambda>zret == psutil.STATUS_ZOMBIEN)r�tempfile�mktemprrr�r��
contextlib�closing�socketryZ
settimeoutr�bind�listenr2�accept�select�filenor�Zrecvr�r�rprqrCr|)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.
    cSs*ytj|�}Wntjk
r$YnXdS)N)rprq�
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�r�r�r�rgrgrhr�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)r�r�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�r�r�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�r�r�r�cCstj|�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	Cs4t|d��}|j�}WdQRX|s"|r0tj|�|S)z8Wait for a file to be written on disk with some content.�rbN)�open�readrlr�)Zfnamer�r�r�r�rgrgrhrE�s
cCs
|�}|S)zVKeep calling function for timeout secs and exit if eval()
    expression is True.
    rg)r��expr�retrgrgrhrC�scCsfy0tj|�}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�|rvtd�std��t|t�r(tjd�}tjdddd��}|j|�WdQRXzt	j
d|jd	|g�Wdt|j�Xn.t
jt|�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)rrrr~�boolr�r�r�r�r�rbrcr�r>�shutil�copyfilerrrlr
�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�rr��unittestrZassertRaisesRegexprrgrgrgrhr�srcCs$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�rtrlrm�splitext)rvrwrgrgrhrxszget_suite.<locals>.<listcomp>ZWHEELHOUSE_UPLOADER_USERNAMEcSsg|]}|jd�s|�qS)�osx�posix�linux)r"r#r$)r�)rvrwrgrgrhrxszpsutil.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�rr&r'r(r)r,r$r�r-rjr.)r�r*r/r0rgrgrhr:#scCsttd|d�S)zZDecorator which runs a test function and retries N times before
    actually failing.
    N)r�r�r�)r��AssertionError)r�rgrgrhr9/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�)r3)r�rhr8s	z(skip_on_access_denied.<locals>.decoratorrg)r3rrg)r3rhr76s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�rr2)r�r��msg)r�r3rgrhr�Is
z;skip_on_not_implemented.<locals>.decorator.<locals>.wrapper)r�r�)r�r�)r3)r�rhrHsz*skip_on_not_implemented.<locals>.decoratorrg)r3rrg)r3rhr8Fs
�	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]sccs@t|d�}z
|VWdytj|�Wntk
r8YnXXdS)zaA context manager which returns a non-existent file name
    and tries to delete it on exit.
    )rN)r@rl�unlinkr�)rrmrgrgrhrIes

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


cCsTtjtj|�}y"|j|�|tjkr.|jd�Wntk
rN|j��YnX|S)zBind a UNIX socket.rX)r�ryr�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�r9�connectr�r|r�)r<r>Zllr�Zcaddr�argrgrhrL�s 


cCs�d}}y@t|tjd�}|jd�tjtjtj�}|jd�|j|�Wn6tk
r~|dk	rh|j�|dk	rx|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)rKr�rZsetblockingryr?rer|)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,



cCs�ddl}trtr|tjkrTdd�|jd�D�}x|D]}q4WtsHt|�}|j|�n8|tjkrvtsjt|�}|j	|�n|t
jkr�n
td|��dS)z[Check a net address validity. Supported families are IPv4,
    IPv6 and MAC addresses.
    rNcSsg|]}t|��qSrg)r�)rvrwrgrgrhrx�sz%check_net_address.<locals>.<listcomp>r{zunknown family %r)
�	ipaddress�enumrr�rr�rZIPv4AddressrZIPv6AddressrpZAF_LINKrr)r>r<rEZoctsZnumrgrgrhrG�s 



c(Cs�t|�dk}t|dd	�d
k}|r |r�ttd�r�tr�ytj|j|j|j�}Wn:tj	t
fk
r�}z|jdtj
krv�WYdd}~XnXtj|��WdQRX|jttfk�r2|jtk�r>tj|j|j�}tj|��Vy|j|jddf�Wn6tj	k
�r$}z|jtjk�r�WYdd}~XnXWdQRXn|jtk�r>|jtk�rJxL|j|jfD]<}|jttfk�r�|�sv�qXt|j|j�n|jtk�rX�qXWdd�tt�D�}dS)z*Check validity of a connection namedtuple.r�fdrY�fromfdrNcSs g|]}|jd�rtt|��qS)ZCONN_)rtrurp)rvrwrgrgrhrx=sz+check_connection_ntuple.<locals>.<listcomp>r�r�)r�rur�r�r
rHrGr<r=�errorr�r�r�ZEBADFr�r�rrr�ZladdrZ
EADDRNOTAVAILryrZraddrrGZiprrp)r�Zhas_pidZhas_fdZdupsockr�r�r>ZvalidsrgrgrhrF�s@
 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�imprJ)�modulerKrMrgrgrhrOFs
cCs�tjjtjj|��d}tjddkr:ddl}|j||�Stjdd�dkrfddlm	}|||�j
�Sddl}|jj
||�}|jj|�}|jj|�|SdS)Nrrrr)�SourceFileLoader)rr)rlrmr!r�rjrorMZload_sourceZimportlib.machineryrO�load_module�importlib.util�util�spec_from_file_location�module_from_spec�loader�exec_module)rmr�rMrOrK�spec�modrgrgrhrPSscCstj|t�dS)zRaise a warning msg.N)�warningsrQ�UserWarning)r4rgrgrhrQhscCsVt|�}|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�)rv�nrgrgrh�	<genexpr>vsz is_namedtuple.<locals>.<genexpr>)r=�	__bases__r��tuplerur~�all)rw�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)rvrw)�extrgrhrx�sz'copyload_shared_lib.<locals>.<listcomp>N)r�r�rprqr^�random�choicerr�ctypesZCDLLr>)�
dst_prefix�dst�libsr�rg)rerhrRzs


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)rYrcZwow64)rlrmr!rdr�)rvrw)rergrhrx�sz'copyload_shared_lib.<locals>.<listcomp>N)rhrlrmr�r�rprqr^rfrgrrZWinDLLZwindllZkernel32�FreeLibraryZHMODULEZargtypesZ_handler>)	rirlrmrjrkr��cfilernr	rg)rerhrR�s$





)rr)rr)rUrV)rWrri�)rZr[)N)F)TF)N)N)N)r5)rT�rTr)rp)�r�Z
__future__r�atexitr�rhr�r�rlrfr�r�rr�r
rbrjr�r�r�r�rrYrrrrrprrr	r
Zpsutil._commonrZpsutil._compatrr
rrroZ	unittest2rrrLrF�__all__�getenvr!�builtin_module_namesrZ	WIN_VISTArr]�getr"rrrrr$rrmr�rnr�rr�r �getfilesystemencodingrdZASCII_FS�abspathr�__file__rrr%r�rqr%r&rBr'r(r)Zmemory_full_infor[r1r*r+r,ZHAS_THREADSr-r_r.r/r0rsrr�devnullrrr#ru�objectryrzr�r�r�r��registerr�r�r�r�r�r4r6r5r2r�r3rBrAr�r�rD�EnvironmentErrorr1rErCr>r�contextmanagerr=r?r@rr r;r<r:r9r7r8rHrIrJrKrLrMrNrGrFrOrPrQrSrRrgrgrgrh�<module>	sN








 




0 #%
_:


	
	



L

Back to Directory File Manager
<