MOON
Server: Apache
System: Linux server30c.hostingraja.org 3.10.0-962.3.2.lve1.5.63.el7.x86_64 #1 SMP Fri Oct 8 12:03:35 UTC 2021 x86_64
User: jibhires (1887)
PHP: 8.1.30
Disabled: show_source, system, shell_exec, passthru, exec, popen, proc_open, allow_url_fopen, symlink, escapeshellcmd, pcntl_exec
Upload Files
File: //opt/alt/python35/lib64/python3.5/site-packages/psutil/tests/__pycache__/__init__.cpython-35.pyc


Cs[a��Q@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�krddl(Z)nddl)Z)yddl)m*Z*Wn?e+k
raej,��ej-d�ddl*Z*WdQRXYnXej'd�kr�ddl.Z.ndZ.dddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZgDZ/ej0d#�ppd[d�kZ1d^ej2kZ3er�d�ndZ4e5ej6j7d$��Z8e5ej6j7d��Z9d`Z:d�Z;e8s�e9r�dndcZ<ej0dd�s�e1rdendZ=e8se9r)e:d9Z:e<d9Z<dfZ>ej?dgkrGdhZ>ndiZ>ej@jAej@jBejC��e>�ZDeDeEejF��ZDeDdjZGeDe$dk�ZHejI�jJ�d�kZKej@jLej@jAej@jMeN�dndn��ZOej@jAeOdo�ZPej@jLej@jMeN��ZQeRejSdp�ZTeRedq�ZUeoJeZVeRejSdr�ZWeRejSds�ZXeRejSdt�ZYduejS�jZ�j[kZ\eRejSdv�Z]eRejSdw�Z^eRejSdx�Z_eRejSdy�Z`eRedz�Zaeao
e5ejb��ZceRed{�ZdeRed|�Zed}d~�Zfef�Zgehejid�Zjd�d��eke�D�Zleme
d�en��Zoeme
d�en��Zpeq�Zreq�Zseq�Ztd�d��Zuejvd�d���Zwejvd�d���ZxGd�d��d�ejy�Zzd�d��Z{e{dd�d6��Z|e{d�d8��Z}d�d7�Z~e{d�d4��Ze{d�d���Z�d�d�d5�Z�d�dI�Z�d�dH�Z�Gd�d��d�en�Z�e�d�ej�d�dd�e<d�d��d�dK��Z�e�d�e�e�fd�dd�e<d�d��d�d�d�dL��Z�e�d�e�d�dd�e<d�d��d�dJ��Z�d�dC�Z�d�d��Z�ej�d�dB��Z�dd�dD�Z�e>d[d�dG�Z�Gd�d��d�e)j��Z�e�e)_�d�d��Z�d�d>�Z�d�d?�Z�d�d=�Z�e:d�d<�Z�dd�d:�Z�dd�d;�Z�d�d�dO�Z�ej�d[d�dP��Z�eedd�dQ�Z�e
jd�dR�Z�d�d�dS�Z�d�dT�Z�ej�d�dU��Z�d�dN�Z�d�dM�Z�d�dV�Z�d�dW�Z�d�dX�Z�d�dZ�Z�er�	ej�e>d�dY��Z�nej�e>d�dY��Z�dS)�z
Test utilities.
�)�print_functionN)�AF_INET)�AF_INET6)�
SOCK_DGRAM)�SOCK_STREAM)�MACOS)�POSIX)�SUNOS)�WINDOWS)�
supports_ipv6)�PY3)�u)�unicode)�which��)�mock�ignore���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�ig�?ZSILENT�z$testfn�javaz
$psutil-test-z
@psutil-test-z	-internalu-ƒőő�ascii�us-asciiz..�scriptsZcpu_affinityZcpu_freq�environZio_countersZioniceZuss�memory_mapsZcpu_numZrlimit�threads�sensors_batteryZsensors_fansZsensors_temperaturescCs�dd�}tr�|tj�pt|tjjtj��pt|tdtjdd���pt|tj	�j
��}|s�td��|Stjjtj�}tjj|�s�t
|��|SdS)NcSsJy)tj|dgdtjdtj�Wntk
rAdSYnX|SdS)Nz-V�stdout�stderr)�
subprocess�
check_call�PIPE�	Exception)�exe�rj�/__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�Processri�
ValueError�exists�AssertionError)rlrirjrjrk�_get_py_exe�s	#rxzr+cCs.g|]$}|jd�rtt|��qS)ZSTATUS_)�
startswith�getattrrs)�.0�xrjrjrk�
<listcomp>�s	r}�AF_UNIX�SOCK_SEQPACKETcCst|dtj�dS)N�file)�printrmrd)�srjrjrk�	logstderr�sr�cCs�td�tj�x�tjtd��D]t}t|t�rNtt�}nt}|j	|�r*td|�yt
|�Wq*tk
r�tj
�Yq*Xq*WxItD]A}td|�yt
|�Wq�tk
r�tj
�Yq�Xq�WdS)Nz.executing cleanup_test_files() atexit function�.zremoving temporary test file %r)r�r�closero�listdirr
�
isinstancerrryr?rh�	traceback�	print_exc�_testfiles_created)�name�prefixrprjrjrk�cleanup_test_files�s$




r�cCstd�tdd�dS)Nz.executing cleanup_test_procs() atexit function�	recursiveT)r�r4rjrjrjrk�cleanup_test_procs�s
r�c@sjeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dS)�
ThreadTaskz6A thread task which does nothing expect staying alive.cCs5tjj|�d|_d|_tj�|_dS)NFg����MbP?)�	threading�Thread�__init__�_running�	_interval�Event�_flag)�selfrjrjrkr�s		zThreadTask.__init__cCs&|jj}d||jt|�fS)Nz<%s running=%s at %#x>)�	__class__�__name__r��id)r�r�rjrjrk�__repr__
szThreadTask.__repr__cCs|j�|S)N)�start)r�rjrjrk�	__enter__s
zThreadTask.__enter__cOs|j�dS)N)�stop)r��args�kwargsrjrjrk�__exit__szThreadTask.__exit__cCs6|jrtd��tjj|�|jj�dS)zStart thread and keep it running until an explicit
        stop() request. Polls for shutdown every 'timeout' seconds.
        zalready startedN)r�rur�r�r�r��wait)r�rjrjrkr�s	zThreadTask.startcCs:d|_|jj�x|jr5tj|j�qWdS)NT)r�r��set�time�sleepr�)r�rjrjrk�runs	
zThreadTask.runcCs,|jstd��d|_|j�dS)z8Stop thread execution and and waits until it is stopped.zalready stoppedFN)r�ru�join)r�rjrjrkr�$s		zThreadTask.stopN)r��
__module__�__qualname__�__doc__r�r�r�r�r�r�r�rjrjrjrkr�s	r�cs%tj���fdd��}|S)Ncs4y�||�SWntk
r/t��YnXdS)N)rhr4)r�r�)�funrjrk�wrapper2s

z&_reap_children_on_err.<locals>.wrapper)�	functools�wraps)r�r�rj)r�rk�_reap_children_on_err1s!r�cKs�|jdt�|jdt�|jdtj��|jdtj�tr_|jdd�|dkr�tt�dt}td	|g}t	j
||�}tj|�t
td
ddd�n,t	j
||�}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().
    �stdinrc�cwd�env�
creationflagsiNz:from time import sleep;open(r'%s', 'w').close();sleep(60);z-c�deleteT�empty)�
setdefaultrro�getcwdr_r
r?�_TESTFNrre�Popen�_subprocesses_started�addrFrE�pid)�cmd�kwdsZpylineZsprocrjrjrkr5<s$




cCs�tjjt�d}tjd|tf�}trJt|dd�}nt|�}t	j
|j�}t|dddd�}t
|�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�rr�Fr�)rorp�basenamer��textwrap�dedentrr
r3rsrtr�rFr?�int�
_pids_startedr�)Z_TESTFN2r��subpZchild1�dataZ
child2_pidZchild2rjrjrkr7]s	

cs+tjst�tr'tjdt�nt}tj	d|�}t
jtjtj
����}|jt�|j|�|jd�t|�|j�\}}zqtj|j�gggt�t|jd��}tj|�tj|��t�fdd�d�|SWd|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)
        rZics
�j�S)N)�statusrj)�zprocrjrk�<lambda>�sz$create_zombie_proc.<locals>.<lambda>zret == psutil.STATUS_ZOMBIEN)rsrrwr�tempfile�mktemprr r�r��
contextlib�closing�socketr~�
settimeoutr�bind�listenr3�accept�select�filenor��recvr�r�rtrDr�)Z	unix_file�src�sock�conn�_Zzpidrj)r�rkr6�s$





c
Ks�|jdd�|jdd�tjdtdddd��S}tj|j�|j|�|j�t	t
|jg|�}t|j�WdQRX|S)	zeRun python 'src' code string in a separate interpreter.
    Returns a subprocess.Popen instance.
    rcNrdr��mode�wtr�F)
r�r��NamedTemporaryFilerr�r�r��write�flushr5rrEr�)r�r��fr�rjrjrkr3�s	

cKst|ttf�rdnd}tr3|r3dnd}|jd|�|jdtj�|jdtj�|jdd�|jd	|�tj||�}tj	|�|j
�\}}|jdkr�t|��|r�t
|�|jd
�r
|dd
�}|S)zUrun cmd in a subprocess and return its output.
    raises RuntimeError on error.
    TFir�shellrcrd�universal_newlinesr��
NrZ���)r��strrr
r�rergr�r�r��communicate�
returncode�RuntimeErrorrR�endswith)r�r�r��flags�prcrdrjrjrk�sh�s"!

r�Fc	'Cs�dd�}|r3ttj�jdd��}n	t�}xtr\tj�}tj|j�y|j	�WnRt
k
r�}z2tr�|jdkr�n|jtj
kr��WYdd}~XnX|jr�|jj�|jr�|jj�z|jr	|jj�Wdy|j�Wn:t
k
rW}z|jtjkrE�WYdd}~XnXXq?WxXtr�tj�}ytj|�}Wntjk
r�||�Yq`X|j|�q`W|r�x4|D],}y|j	�Wq�tjk
r�Yq�Xq�Wtj|dt�\}}xB|D]:}td|�y|j�Wqtjk
rPYqXqWtj|dt�\}}|r�x|D]}td	|�q}Wx|D]}||j�q�WdS)
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�tj|�st|��|tj�ks:t|��y,tj|�}|j�set|��Wntjk
r}YnXds�td|��dS)Nrzpid %s is not gone)rsZ
pid_existsrwZpidsrtZ
is_running�
NoSuchProcess)r�r�rjrjrk�assert_gone�sz"reap_children.<locals>.assert_goner�TrXN�timeoutz0couldn't terminate process %r; attempting kill()zprocess %r survived kill())r�rsrt�childrenr��popr�r�r��	terminate�OSErrorr
�errnoZESRCHrcr�rdr�r�ZECHILDr�Z
wait_procsrrR�kill)	r�r�r�r��errr�r�Zgone�aliverjrjrkr4�sh!			
	
		
	
	

cCs�tstd��d}tj�d}x4|D],}|j�sM|dkrZ||7}q/Pq/W|sutd|��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 POSIXrUrr�zcan't parse %rrrZr)	r�NotImplementedErrorro�uname�isdigitru�splitr��len)r�r��c�minor�microZnums�majorrjrjrkrC0s&

cCs�tstd��tj�}t|d�r?|jp9d}n:tjd|d�}|rst|j	d��}nd}|d|d|fS)Nznot WINDOWS�service_pack_majorrz\s\d$rrZ)
r
r�rmZgetwindowsversion�hasattrr�re�searchr��group)ZwvZsp�rrjrjrkrBHsc@s[eZdZdZeddddd�dd�Zdd	�Zd
d�Zdd
�ZdS)�retryzA retry decorator.Ng����MbP?cCst|dtj�S)Nr�)r�rmrd)r�rjrjrkr�dszretry.<lambda>cCsI|r|rtd��||_||_||_||_||_dS)Nz/timeout and retries args are mutually exclusive)ru�	exceptionr��retries�interval�logfun)r�rr�r	r
rrjrjrkr�_s				zretry.__init__ccsx|jr=tj�|j}xUtj�|kr9dVqWn7|jrhx+t|j�D]}dVqVWnx	dVqkWdS)N)r�r�r	�range)r��stop_atr�rjrjrk�__iter__ns		zretry.__iter__cCs#|jdk	rtj|j�dS)N)r
r�r�)r�rjrjrkr�zszretry.sleepcs1tj����fdd��}�|_|S)Ncs�d}xy�D]q}y�||�SWq
�jk
r}}z4|}�jdk	r^�j|��j�w
WYdd}~Xq
Xq
Wtr�|�n�dS)N)rrr�r)r�r��excr�)r�r�rjrkr�s


	zretry.__call__.<locals>.wrapper)r�r��	decorator)r�r�r�rj)r�r�rk�__call__~s$	zretry.__call__)	r�r�r�r�rhr�rr�rrjrjrjrkr\s
rrrr�r
g����MbP?cCs$tj|�tr tjd�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)rsrtr
r�r�)r�rjrjrkrE�s
Tc	CsKt|d��}|j�}WdQRX|s7|s7t�|rGt|�|S)z8Wait for a file to be written on disk with some content.�rbN)�open�readrwr?)Zfnamer�r�r�r�rjrjrkrF�s
cCs|�}t|�st�|S)zVKeep calling function for timeout secs and exit if eval()
    expression is True.
    )�evalrw)r��expr�retrjrjrkrD�s	cCs�dd�}yltj|�}tj|j�rHtjtj|�}ntjtj|�}t	rm|�n
||�Wn:t
k
r�}z|jtjkr��WYdd}~XnXdS)z>Convenience function for removing temporary test files or dirscSs�tj�d}x�tj�|kr�y|�SWqtk
r�}zD|}|jtjkrc�n!tdt|��tjd�WYdd}~XqXqW|�dS)NrZzignoring %sg{�G�z�?)r�ZWindowsErrorr��ENOENTrRr�r�)r�r
r�r�rjrjrk�	retry_fun�s$zsafe_rmpath.<locals>.retry_funN)
ro�stat�S_ISDIR�st_moder��partial�shutil�rmtree�removerr�r�r)rpr�str�r�rjrjrkr?�s
cCsRytj|�Wn:tk
rM}z|jtjkr;�WYdd}~XnXdS)z-Convenience function for creating a directoryN)ro�mkdirr�r��EEXIST)�dirr�rjrjrk�
safe_mkdir�s
r%ccs7tj�}ztj|�dVWdtj|�XdS)z@Context manager which temporarily changes the current directory.N)ror�r>)�dirname�curdirrjrjrkr>�s

	cCs"tjj|�st|��|r�td�s=td��t|t�r[tj	d�}t|t
�svt|��tjdddddd	��}|j
|�Wd
QRXz tjd|jd|g�Wd
t|j�Xn?tjt|�trtj|�}tj||jtjB�d
S)z1Creates an executable file in the given location.�gcczgcc is not installedz�
                #include <unistd.h>
                int main() {
                    pause();
                    return 1;
                }
                �suffixz.cr�Fr�r�Nz-o)rorprvrwrrur��boolr�r�r�r�r�r�rerfr�r?r�copyfilerrr�chmodr�S_IEXEC)ZoutpathZc_coder�r!rjrjrkr@�s$		 cCstjd|d|�S)Nr�r))r�r�)r�r)rjrjrkrAsc@s:eZdZdd�Zeejd�s6ejjZdS)�TestCasecCs d|jj|jj|jfS)Nz%s.%s.%s)r�r�r�Z_testMethodName)r�rjrjrk�__str__"szTestCase.__str__�assertRaisesRegexN)	r�r�r�r/r�unittestr.ZassertRaisesRegexpr0rjrjrjrkr.sr.cCs0dtjkrdtjd<tjjj�dS)NZPSUTIL_TESTINGrV)ror_rsZ_psplatformZcextZset_testingrjrjrjrk�_setup_tests1s
r2cCs�dd�tjt�D�}dtjkr>dd�|D�}tj�}x1|D])}d|}|jtjj|��qQW|S)NcSsTg|]J}|jd�r|jd�r|jd�rtjj|�d�qS)z.pyZtest_Ztest_memory_leaksr)r�ryrorp�splitext)r{r|rjrjrkr}9s	zget_suite.<locals>.<listcomp>ZWHEELHOUSE_UPLOADER_USERNAMEcSs%g|]}|jd�s|�qS)�osx�posix�linux)r4r5r6)r�)r{r|rjrjrkr}=s		zpsutil.tests.%s)	ror��HEREr_r1�	TestSuite�addTest�defaultTestLoader�loadTestsFromName)Ztestmods�suiteZtmrjrjrkr<8s

cCsNt�tjdt�jt��}|j�}tj|rCdnd�dS)N�	verbosityrrZ)	r2r1�TextTestRunnerr%r�r<�
wasSuccessfulrm�exit)�result�successrjrjrkr=GscCs�t�tjjtjj|��d}tj�}|jtjj	|��tj
dt�j|�}|j
�}tj|r�dnd�dS)Nrr=rZ)r2rorpr3r�r1r8r9r:r;r>r%r�r?rmr@)r�r<rArBrjrjrkr;Ns"cCstdtddd|�S)zZDecorator which runs a test function and retries N times before
    actually failing.
    rr�Nr	)rrw)r	rjrjrkr:Zscs�fdd�}|S)z,Decorator to Ignore AccessDenied exceptions.cs(tj����fdd��}|S)NcsQy�||�SWn9tjk
rL�dk	r9�s9�tjd��YnXdS)Nzraises AccessDenied)rsZAccessDeniedr1�SkipTest)r�r�)r��only_ifrjrkr�dsz9skip_on_access_denied.<locals>.decorator.<locals>.wrapper)r�r�)r�r�)rD)r�rkrcs$	z(skip_on_access_denied.<locals>.decoratorrj)rDrrj)rDrkr8ascs�fdd�}|S)z3Decorator to Ignore NotImplementedError exceptions.cs(tj����fdd��}|S)Ncs[y�||�SWnCtk
rV�dk	r6�s6�d�j}tj|��YnXdS)Nz4%r was skipped because it raised NotImplementedError)r�r�r1rC)r�r��msg)r�rDrjrkr�ts

z;skip_on_not_implemented.<locals>.decorator.<locals>.wrapper)r�r�)r�r�)rD)r�rkrss$z*skip_on_not_implemented.<locals>.decoratorrj)rDrrj)rDrkr9qs
z	127.0.0.1cCs]tjtj���A}|jtjtjd�|j|df�|j�dSWdQRXdS)zReturn an unused TCP port.rZrN)r�r�r��
setsockopt�
SOL_SOCKET�SO_REUSEADDRr��getsockname)�hostr�rjrjrkrI�sccsUtjst�td|�}z	|VWdytj|�Wntk
rOYnXXdS)zaA context manager which returns a non-existent file name
    and tries to delete it on exit.
    r)N)rsrrwrAro�unlinkr�)r)rprjrjrkrJ�s	
cCs�|dkr$|ttfkr$d}tj||�}yJ|jtjtjd�|j|�|tjkr{|jd�|SWnt	k
r�|j
��YnXdS)zBinds a generic socket.NrUrrZrY)rUr)rrr�rFrGrHr�rr�rhr�)�family�type�addrr�rjrjrkrK�s



cCs�tjst�tjj|�s.t|��tjtj|�}y-|j|�|tj	kro|j
d�Wntk
r�|j��YnX|S)zBind a UNIX socket.rY)
rsrrwrorprvr�r~r�rr�rhr�)r�rMr�rjrjrkrL�s


cCs�tjtj|t����}|j|�|jd�|j�}tj|t�}yV|j|�|j�}x6|j�\}}||kr�||fS|j	�quWWnt
k
r�|j	��YnXWdQRXdS)z^Build a pair of TCP sockets connected to each other.
    Return a (server, client) tuple.
    rYN)r�r�r�rr�r�rI�connectr�r�r�)rLrNZllr�Zcaddr�arjrjrkrM�s 





cCs�tjst�d}}yXt|dtj�}|jd�tjtjtj�}|jd�|j|�WnAt	k
r�|dk	r�|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.
    NrMr)rsrrwrLr�r�setblockingr~rOrhr�)r�Zserver�clientrjrjrkrN�s





ccsYg}d}}z�|jttjtj��|jttjtj��t�r�|jttjtj��|jttjtj��trt	rt
�j�}t
�j�}t|�\}}t
|dtj�}x$|||fD]}|j|�q�W|VWdx|D]}|j�qW|dk	r>t|�|dk	rTt|�XdS)z1Open as many socket families / types as possible.NrM)�appendrKr�rrrrrr�HAS_CONNECTIONS_UNIXrJr�rNrLr�r?)ZsocksZfname1Zfname2�s1�s2Zs3r�rjrjrkrO�s,
		

cCsoddl}tr6tr6t|tj�s6t|��|tjkr�dd�|jd�D�}t	|�dkst|��x6|D].}d|ko�dkns�t|��q�Wts�t
|�}|j|�n�|tjkr&t|t
�st|��tst
|�}|j|�nE|tjkr\tjd|�dk	skt|��ntd	|��dS)
z[Check a net address validity. Supported families are IPv4,
    IPv6 and MAC addresses.
    rNcSsg|]}t|��qSrj)r�)r{r|rjrjrkr}s	z%check_net_address.<locals>.<listcomp>r�r�z([a-fA-F0-9]{2}[:|\-]?){6}zunknown family %r)�	ipaddress�enumrr��IntEnumrwr�rr�r�rZIPv4Addressrr�ZIPv6AddressrsZAF_LINKr�matchru)rNrLrXZocts�numrjrjrkrHs&
,'c(Cs�t|�dkst|��t|�dk}t|dd�dk}|d|jksat�|d|jkszt�|d|jks�t�|d|jks�t�|d|jks�t�|d	|jks�t�|r�|d|j	ks�t�|r�|jdkst|��t
td
�r�tr�y"tj
|j|j|j�}WnGtjtfk
r�}z|jdtjkr��WYdd}~XnHXtj|��5|j|jks�t�|j|jks�t�WdQRX|jtttfkstt|j���|jttfkr�|jtkr�tj|j|j�}tj|��cy|j|jddf�Wn=tjk
r�}z|jtjkr��WYdd}~XnXWdQRXn0|jtkr�|jtjks�t|j��|jtttfks%tt|j���|jtkrU|jtjksUt|j��x�|j|jfD]�}|jttfkrt |t!�s�t|��|s�qht |j"t#�s�t|j"��d|j"ko�dkns�t|j"��t$|j%|j�qh|jtkrht |t&�sht|��qhWt |jt&�sXt|��d
d�t't�D�}|j|ks�t|��dS)z*Check validity of a connection namedtuple.rXr�fdrZrrrr��fromfdNi��cSs.g|]$}|jd�rtt|��qS)ZCONN_)ryrzrs)r{r|rjrjrkr}hs	z+check_connection_ntuple.<locals>.<listcomp>)rXrr�r�)(r�rwrzr]rLrM�laddr�raddrr�r�rr�r
r_�errorr�r�r��EBADFr�r�rrr~�reprr�Z
EADDRNOTAVAILrsZ	CONN_NONErrrr��tuple�portr�rHZipr�r$)r�Zhas_pidZhas_fdZdupsockr�r�rNZvalidsrjrjrkrG%sf"- !!!.cCsdy%ddl}t|d�s$t�Wn+tk
rRddl}|j|�SYnX|j|�SdS)z,Backport of importlib.reload of Python 3.3+.rN�reload)�	importlibr�ImportError�imprg)�modulerhrjrjrjrkrPqs

cCs�tjjtjj|��d}tjddkrQddl}|j||�Stjdd�dkr�ddlm	}|||�j
�Sddl}|jj
||�}|jj|�}|jj|�|SdS)Nrrrr)�SourceFileLoader)rr)rorpr3r�rmrrrjZload_sourceZimportlib.machineryrl�load_module�importlib.util�util�spec_from_file_location�module_from_spec�loader�exec_module)rpr�rjrlrh�spec�modrjrjrkrQ~s"cCstj|t�dS)zRaise a warning msg.N)�warningsrR�UserWarning)rErjrjrkrR�scCswt|�}|j}t|�dks7|dtkr;dSt|dd�}t|t�s`dStdd�|D��S)z-Check if object is an instance of namedtuple.rZrF�_fieldsNcss!|]}t|�tkVqdS)N)rMr�)r{�nrjrjrk�	<genexpr>�sz is_namedtuple.<locals>.<genexpr>)rM�	__bases__r�rerzr��all)r|�t�br�rjrjrkrT�s	"c#s�d�tjd|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.sor�r)csMg|]C}tjj|j�d�krd|jj�kr|j�qS)rZ�python)rorpr3�lower)r{r|)�extrjrkr}�s	z'copyload_shared_lib.<locals>.<listcomp>N)r�r�rsrtr`�random�choicerr+�ctypesZCDLLr?)�
dst_prefix�dst�libsr�rj)r�rkrS�s%
	c	#s�ddlm}ddlm}d�tjd|d��}�fdd�tj�j�D�}tj	|�}t
j||�d	}ztj|�}|VWd	|d	k	r�tj
jj}|jg|_||j�}|dkr�|�t|�Xd	S)
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.dllr�r)cstg|]j}tjj|j�dj��krdtjj|j�j�krd|jj�kr|j�qS)rZrZwow64)rorpr3r�r�)r{r|)r�rjrkr}�s	%!z'copyload_shared_lib.<locals>.<listcomp>N)r�r�r�r�r�rsrtr`r�r�rr+ZWinDLLZwindllZkernel32�FreeLibraryZHMODULEZargtypes�_handler?)	r�r�r�r�r�r��cfiler�rrj)r�rkrS�s$%	)rr)rr)rVrW)rXrri�)r\r])rUr)�r�Z
__future__r�atexitr�r�r�r�ror�rr�rr�rrermr�r�r�r�r�rvrrrrrsrrr	r
Zpsutil._commonrZpsutil._compatrr
rrrrZ	unittest2r1rri�catch_warnings�simplefilterrY�__all__�getenvr"�builtin_module_namesrZ	WIN_VISTAr*r_�getr#rrrrr%rr�rpr�rqr�r r��getpidr�r!�getfilesystemencodingr�ZASCII_FS�abspathr&�__file__rrr7rrtr&r'rTr(r)r*Zmemory_full_inforxr2r+r,r-ZHAS_THREADSr.rbr/r0r1rxrr�devnullrr$r$rz�objectr~rr�r�r�r�r��registerr�r�r�r�r�r5r7r6r3r�r4rCrBrr�rE�EnvironmentErrorrwrFrDr?r%�contextmanagerr>r@rAr.r2r<r=r;r:r8r9rIrJrKrLrMrNrOrHrGrPrQrRrTrSrjrjrjrk�<module>	s\


				
!

	'
0
				0 #%a:#			L