Your IP : 3.138.126.233
�
��abc@s�ddlZddlmZddlZddlZddlmZddlZddl Z ddl
Z
ddlZddlZddl
Z
ddlZddlZyddlZWnek
r�dZnXddlZddlZddlZddlZddlZyddlZWnek
r9ddlZnXddlZddlmZddlmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0e
j1e2�Z3dZ4e
j5e4�Z6dZ7d e7d
Z8e7dZ9dZ:d
e:de9de4d
e:de9dZ;dZ<de;de<de;dZ=e8d
e4e8dZ>de>dZ?de7de?de=dZ@e
j5e@�ZAde:de9d
ZBe
j5eB�ZCd�ZDd �ZEd!�ZFd"�ZGddd#�ZHd$�ZId%�ZJd&�ZKejLd'��ZMejLd(��ZNejLd)d*��ZOd+ePfd,��YZQd-�ZRd.ePfd/��YZSd0�ZTd1ePfd2��YZUe
j5d3e
jV�ZWd4�ZXdd5�ZYd6�ZZd7�Z[d8�Z\d9�Z]d:�Z^e
j5d;e
j_�Z`e
j5d<�Zadd=�Zbe
j5d>�Zcd?�Zdd@�ZedA�ZfdBZgdC�ZhdD�ZidEePfdF��YZjdGePfdH��YZkdIePfdJ��YZld�ZmdendR�ZodS�Zpd�ZqdZePfd[��YZre
j5d\�Zse
j5d]�Zte
j5d^�Zud_�Zd`�Zver�ddalmwZxmyZymzZzdbe%j{fdc��YZ{ddexfde��YZwdfewe(fdg��YZ|nej}dh Z~e~d�krdje%jfdk��YZerdle%j�fdm��YZ�qndne&j�fdo��YZ�erFdpe&j�fdq��YZ�ndre&j�fds��YZ�dt�Z�duePfdv��YZ�dwe�fdx��YZ�dye�fdz��YZ�d{e)fd|��YZ�d}ePfd~��YZ�d�Z�dS(�i����N(tdeque(tiglobi(tDistlibException(tstring_typest text_typetshutilt raw_inputtStringIOtcache_from_sourceturlopenturljointhttplibt xmlrpclibt splittypetHTTPHandlertBaseConfiguratortvalid_identt ContainertconfigparsertURLErrortZipFiletfsdecodetunquotes\s*,\s*s
(\w|[.-])+s(\*|:(\*|\w+):|t)s\*?s([<>=!~]=)|[<>]t(s)?\s*(s)(s)\s*(s))*s(from\s+(?P<diref>.*))s\(\s*(?P<c1>t|s)\s*\)|(?P<c2>s\s*)s)*s\[\s*(?P<ex>s)?\s*\]s(?P<dn>s \s*)?(\s*s)?$s(?P<op>s)\s*(?P<vn>c
Cskd�}d}tj|�}|rg|j�}|d}|dpK|d}|dsad}nd}|dj�}|s�d}d}|d} n{|ddkr�d |}ntj|�}
g|
D]}||�^q�}d
|djg|D]}d|^q��f} |d
s$d}ntj |d
�}t
d|d|d|d| d|d|�}n|S(NcSs|j�}|d|dfS(Ntoptvn(t groupdict(tmtd((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytget_constraintYstdntc1tc2tdireftis<>!=s~=s%s (%s)s, s%s %stextnametconstraintstextrastrequirementtsourceturl(tNonetREQUIREMENT_REtmatchRtstriptRELOP_IDENT_REtfinditertjointCOMMA_REtsplitR(
tsRtresultRRR&tconsR+tconstrtrstiteratortconR(((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytparse_requirementWs4
0
cCs�d�}i}x�|D]�\}}}tjj||�}x�t|�D]�}tjj||�} x�t| �D]v}
|||
�}|dkr�|j|d�qo|||
�}|jtjjd�jd�}
|
d|||<qoWqGWqW|S(s%Find destinations for resources filescSsG|jtjjd�}|jtjjd�}|t|�jd�S(Nt/(treplacetostpathtseptlentlstrip(tbaseR@((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytget_rel_pathsR=N( R?R@R2RR,tpopR>RAtrstrip(tresources_roottrulesREtdestinationsRDtsuffixtdesttprefixtabs_basetabs_globtabs_patht
resource_filetrel_pathtrel_dest((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytget_resources_dests|s !cCs:ttd�rt}ntjttdtj�k}|S(Ntreal_prefixtbase_prefix(thasattrtsystTrueRMtgetattr(R6((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytin_venv�s cCs7tjjtj�}t|t�s3t|�}n|S(N(R?R@tnormcaseRXt
executablet
isinstanceRR(R6((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytget_executable�s
cCs�|}xwtrt|�}|}|r7|r7|}n|r |dj�}||kr]Pn|r|d|||f}q|q q W|S(Nis %c: %s
%s(RYRtlower(tpromptt
allowed_charsterror_prompttdefaulttpR5tc((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytproceed�s
cCsVt|t�r|j�}ni}x+|D]#}||kr+||||<q+q+W|S(N(R^RR4(RtkeysR6tkey((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytextract_by_key�s
cCs�tjddkr+tjd�|�}n|j�}t|�}y�tj|�}|ddd}x]|j�D]O\}}x@|j�D]2\}}d||f}t |�} | ||<q�WqtW|SWn!t
k
r�|jdd�nXd�}
tj
�}y|
||�WnFtjk
r^|j�tj|�}t|�}|
||�nXi}xh|j�D]Z}i||<}xC|j|�D]2\}
}d|
|f}t |�} | ||
<q�WqrW|S( Niisutf-8t
extensionsspython.exportstexportss%s = %scSs0t|d�r|j|�n
|j|�dS(Nt read_file(RWRmtreadfp(tcptstream((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytread_stream�s(RXtversion_infotcodecst getreadertreadRtjsontloadtitemstget_export_entryt ExceptiontseekRtConfigParsertMissingSectionHeaderErrortclosettextwraptdedenttsections(RptdatatjdataR6tgrouptentriestktvR5tentryRqRoRiR&tvalue((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytread_exports�s@
cCs�tjddkr+tjd�|�}ntj�}x�|j�D]�\}}|j|�x�|j�D]u}|j dkr�|j}nd|j|j f}|jr�d|dj
|j�f}n|j||j|�qjWqDW|j|�dS(Niisutf-8s%s:%ss%s [%s]s, (RXRrRst getwriterRR|Rxtadd_sectiontvaluesRKR,RMtflagsR2tsetR&twrite(RlRpRoR�R�R�R5((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyt
write_exports�s
ccs*tj�}z |VWdtj|�XdS(N(ttempfiletmkdtempRtrmtree(ttd((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyttempdirs ccs7tj�}ztj|�dVWdtj|�XdS(N(R?tgetcwdtchdir(Rtcwd((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR�s
iccs7tj�}ztj|�dVWdtj|�XdS(N(tsockettgetdefaulttimeouttsetdefaulttimeout(tsecondstcto((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytsocket_timeouts
tcached_propertycBseZd�Zdd�ZRS(cCs
||_dS(N(tfunc(tselfR�((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyt__init__)scCs<|dkr|S|j|�}tj||jj|�|S(N(R,R�tobjectt__setattr__t__name__(R�tobjtclsR�((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyt__get__.s
N(R�t
__module__R�R,R�(((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR�(s cCs�tjdkr|S|s|S|ddkr@td|��n|ddkrctd|��n|jd�}x#tj|kr�|jtj�quW|s�tjStjj|�S(s�Return 'pathname' as a name that will work on the native filesystem.
The path is split on '/' and put back together again using the current
directory separator. Needed because filenames in the setup script are
always supplied in Unix style, and have to be converted to the local
convention before we can actually use them in the filesystem. Raises
ValueError on non-Unix-ish systems if 'pathname' either starts or
ends with a slash.
R=ispath '%s' cannot be absolutei����spath '%s' cannot end with '/'(R?RAt
ValueErrorR4tcurdirtremoveR@R2(tpathnametpaths((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytconvert_path6s
tFileOperatorcBs�eZed�Zd�Zd�Zd�Zed�Zdd�Z
d�Zd�Zd�Z
d �Zd
�Zeedd�Zd�Zd
�Zd�Zd�ZRS(cCs#||_t�|_|j�dS(N(tdry_runR�tensuredt_init_record(R�R�((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR�Rs cCs%t|_t�|_t�|_dS(N(tFalsetrecordR�t
files_writtentdirs_created(R�((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR�Ws cCs |jr|jj|�ndS(N(R�R�tadd(R�R@((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytrecord_as_written\s cCsitjj|�s1tdtjj|���ntjj|�sGtStj|�jtj|�jkS(s�Tell if the target is newer than the source.
Returns true if 'source' exists and is more recently modified than
'target', or if 'source' exists and 'target' doesn't.
Returns false if both exist and 'target' is the same age or younger
than 'source'. Raise PackagingFileError if 'source' does not exist.
Note that this test is not very accurate: files created in the same
second will have the same "age".
sfile '%r' does not exist(R?R@texistsRtabspathRYtstattst_mtime(R�R*ttarget((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytnewer`scCs�|jtjj|��tjd||�|js�d}|r�tjj|�r`d|}q�tjj |�r�tjj
|�r�d|}q�n|r�t|d��ntj
||�n|j|�dS(s8Copy a file respecting dry-run and force flags.
sCopying %s to %ss%s is a symlinks%s is a non-regular files which would be overwrittenN(t
ensure_dirR?R@tdirnametloggertinfoR�R,tislinkR�tisfileR�RtcopyfileR�(R�tinfiletoutfiletchecktmsg((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyt copy_filets
%cCs�|jtjj|��tjd||�|js�|dkrSt|d�}nt j|dd|�}zt
j||�Wd|j�Xn|j
|�dS(NsCopying stream %s to %stwbtwtencoding(R�R?R@R�R�R�R�R,topenRsRtcopyfileobjR~R�(R�tinstreamR�R�t outstream((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytcopy_stream�s cCs[|jtjj|��|jsJt|d��}|j|�WdQXn|j|�dS(NR�(R�R?R@R�R�R�R�R�(R�R@R�tf((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytwrite_binary_file�s
cCsd|jtjj|��|jsSt|d��}|j|j|��WdQXn|j|�dS(NR�( R�R?R@R�R�R�R�tencodeR�(R�R@R�R�R�((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytwrite_text_file�s
cCs�tjdks-tjdkr�tjdkr�xj|D]_}|jrVtjd|�q4tj|�j|B|@}tjd||�tj||�q4WndS(Ntposixtjavaschanging mode of %sschanging mode of %s to %o( R?R&t_nameR�R�R�R�tst_modetchmod(R�tbitstmasktfilesR�tmode((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytset_mode�s-
cCs|jdd|�S(Nimi�(R�(R5R�((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyt<lambda>�R$cCs�tjj|�}||jkr�tjj|�r�|jj|�tjj|�\}}|j|�tj d|�|j
s�tj|�n|jr�|j
j|�q�ndS(NsCreating %s(R?R@R�R�R�R�R4R�R�R�R�tmkdirR�R�(R�R@RR�((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR��s"
cCs�t||�}tjd||�|js|sD|j||�rf|sSd}qf|t|�}ntj|||t �n|j
|�|S(NsByte-compiling %s to %s(RR�R�R�R�R,RBt
py_compiletcompileRYR�(R�R@toptimizetforceRMtdpathtdiagpath((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytbyte_compile�s
cCstjj|�rtjj|�r�tjj|�r�tjd|�|js`tj |�n|j
r||jkr�|jj|�q�qqtjj|�r�d}nd}tjd||�|js�tj|�n|j
r||j
kr|j
j|�qqndS(NsRemoving directory tree at %stlinktfilesRemoving %s %s(R?R@R�tisdirR�R�tdebugR�RR�R�R�R�R�(R�R@R5((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytensure_removed�s"% cCsjt}x]|setjj|�r:tj|tj�}Pntjj|�}||kr\Pn|}q W|S(N(R�R?R@R�taccesstW_OKR�(R�R@R6tparent((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytis_writable�s
cCs |j|jf}|j�|S(sV
Commit recorded changes, turn off recording, return
changes.
(R�R�R�(R�R6((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytcommit�s
cCs�|js�x9t|j�D](}tjj|�rtj|�qqWt|jdt �}x\|D]Q}tj
|�}|r�tjj||d�}tj|�ntj|�qaWn|j
�dS(Ntreversei(R�tlistR�R?R@R�R�tsortedR�RYtlistdirR2trmdirR�(R�R�tdirsRtflisttsd((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytrollback�s
N(R�R�R�R�R�R�R�RYR�R,R�R�R�R�tset_executable_modeR�R�R�R�R�R�(((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR�Qs
cCs�|tjkrtj|}nt|�}|dkr@|}nG|jd�}t||jd��}x|D]}t||�}qnW|S(Nt.i(RXtmodulest
__import__R,R4RZRF(tmodule_nametdotted_pathtmodR6tpartsRe((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytresolves
tExportEntrycBs;eZd�Zed��Zd�Zd�ZejZRS(cCs(||_||_||_||_dS(N(R&RMRKR�(R�R&RMRKR�((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR�s cCst|j|j�S(N(RRMRK(R�((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR�scCs d|j|j|j|jfS(Ns<ExportEntry %s = %s:%s %s>(R&RMRKR�(R�((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyt__repr__!scCsdt|t�st}nH|j|jko]|j|jko]|j|jko]|j|jk}|S(N(R^RR�R&RMRKR�(R�totherR6((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyt__eq__%s ( R�R�R�R�R�R RR�t__hash__(((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyRs
s�(?P<name>(\w|[-.+])+)
\s*=\s*(?P<callable>(\w+)([:\.]\w+)*)
\s*(\[\s*(?P<flags>\w+(=\w+)?(,\s*\w+(=\w+)?)*)\s*\])?
cCsStj|�}|sId}d|ks3d|krOtd|��qOn|j�}|d}|d}|jd�}|dkr�|d}}n4|dkr�td|��n|jd�\}}|d } | dkrd|ks�d|kr td|��ng} n(g| jd
�D]}
|
j�^q"} t|||| �}|S(Nt[t]sInvalid specification '%s'R&tcallablet:iiR�t,( tENTRY_REtsearchR,RRtcountR4R/R(t
specificationRR6RR&R@tcolonsRMRKR�R�((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyRy7s2
(cCs|d
krd}ntjdkrHdtjkrHtjjd�}ntjjd�}tjj|�r�tj|tj �}|s�t
jd|�q�nGytj|�t
}Wn-tk
r�t
jd|dt
�t}nX|s tj�}t
jd |�ntjj||�S(s�
Return the default base location for distlib caches. If the directory does
not exist, it is created. Use the suffix provided for the base directory,
and default to '.distlib' if it isn't provided.
On Windows, if LOCALAPPDATA is defined in the environment, then it is
assumed to be a directory, and will be the parent directory of the result.
On POSIX, and on Windows if LOCALAPPDATA is not defined, the user's home
directory - using os.expanduser('~') - will be the parent directory of
the result.
The result is just the directory '.distlib' in the parent directory as
determined above, or with the name specified with ``suffix``.
s.distlibtnttLOCALAPPDATAs
$localappdatat~s(Directory exists but is not writable: %ssUnable to create %stexc_infos#Default location unusable, using %sN(R,R?R&tenvironR@t
expandvarst
expanduserR�R�R�R�twarningtmakedirsRYtOSErrorR�R�R�R2(RKR6tusable((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytget_cache_baseVs&
cCs`tjjtjj|��\}}|r?|jdd�}n|jtjd�}||dS(s
Convert an absolute path to a directory name for use in a cache.
The algorithm used is:
#. On Windows, any ``':'`` in the drive is replaced with ``'---'``.
#. Any occurrence of ``os.sep`` is replaced with ``'--'``.
#. ``'.cache'`` is appended.
Rs---s--s.cache(R?R@t
splitdriveR�R>RA(R@RRe((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytpath_to_cache_dirs
$cCs|jd�s|dS|S(NR=(tendswith(R5((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytensure_slash�scCskd}}d|kr^|jdd�\}}d|krC|}q^|jdd�\}}n|||fS(Nt@iR(R,R4(tnetloctusernametpasswordRM((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytparse_credentials�s
cCs tjd�}tj|�|S(Ni(R?tumask(R6((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytget_process_umask�s
cCsFt}d}x3t|�D]%\}}t|t�st}PqqW|S(N(RYR,t enumerateR^RR�(tseqR6tiR5((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytis_string_sequence�ss3([a-z0-9_]+([.-][a-z_][a-z0-9_]*)*)-([a-z0-9_.+-]+)s
-py(\d\.?\d?)cCsd}d}t|�jdd�}tj|�}|r[|jd�}||j� }n|r�t|�t|�dkr�tj tj
|�d|�}|r�|j�}|| ||d|f}q�n|dkrtj |�}|r|jd�|jd�|f}qn|S(sw
Extract name, version, python version from a filename (no extension)
Return name, version, pyver or None
t t-is\biN(
R,RR>tPYTHON_VERSIONRR�tstartRBtreR.tescapetendtPROJECT_NAME_AND_VERSION(tfilenametproject_nameR6tpyverRtn((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytsplit_filename�s""!'s-(?P<name>[\w .-]+)\s*\(\s*(?P<ver>[^\s)]+)\)$cCsRtj|�}|s(td|��n|j�}|dj�j�|dfS(s�
A utility method used to get name and version from a string.
From e.g. a Provides-Dist value.
:param p: A value in a form 'foo (1.0)'
:return: The name and version as a tuple.
s$Ill-formed name/version string: '%s'R&tver(tNAME_VERSION_RER.RRR/R`(ReRR((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytparse_name_and_version�s
cCs t�}t|pg�}t|p'g�}d|krS|jd�||O}nx�|D]�}|dkr||j|�qZ|jd�r�|d}||kr�tjd|�n||kr|j|�qqZ||kr�tjd|�n|j|�qZW|S(Nt*R3isundeclared extra: %s(R�R�R�t
startswithR�R(t requestedt availableR6trtunwanted((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyt
get_extras�s&
cCs�i}yqt|�}|j�}|jd�}|jd�sRtjd|�n$tjd�|�}tj |�}Wn&t
k
r�}tjd||�nX|S(NsContent-Typesapplication/jsons(Unexpected response for JSON request: %ssutf-8s&Failed to get external data for %s: %s(R R�tgetRCR�R�RsRtRvRwRzt exception(R+R6tresptheaderstcttreaderte((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyt_get_external_data�ss'https://www.red-dove.com/pypi/projects/cCs9d|dj�|f}tt|�}t|�}|S(Ns%s/%s/project.jsoni(tupperR
t_external_data_base_urlRP(R&R+R6((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytget_project_datascCs6d|dj�||f}tt|�}t|�S(Ns%s/%s/package-%s.jsoni(RQR
RRRP(R&tversionR+((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytget_package_datastCachecBs)eZdZd�Zd�Zd�ZRS(s�
A class implementing a cache for resources that need to live in the file system
e.g. shared libraries. This class was moved from resources to here because it
could be used by other modules, e.g. the wheel module.
cCsvtjj|�s"tj|�ntj|�jd@dkrQtjd|�ntjjtjj |��|_
dS(su
Initialise an instance.
:param base: The base directory where the cache should be located.
i?isDirectory '%s' is not privateN(R?R@R�RR�R�R�RR�tnormpathRD(R�RD((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR�"s
cCs
t|�S(sN
Converts a resource prefix to a directory name in the cache.
(R$(R�RM((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyt
prefix_to_dir0scCs�g}x�tj|j�D]�}tjj|j|�}yZtjj|�s^tjj|�rntj|�n"tjj|�r�t j
|�nWqtk
r�|j|�qXqW|S(s"
Clear the cache.
(
R?R�RDR@R2R�R�R�R�RR�Rztappend(R�tnot_removedtfn((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytclear6s$
(R�R�t__doc__R�RXR\(((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyRVs t
EventMixincBs>eZdZd�Zed�Zd�Zd�Zd�ZRS(s1
A very simple publish/subscribe system.
cCs
i|_dS(N(t_subscribers(R�((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR�KscCs\|j}||kr+t|g�||<n-||}|rK|j|�n
|j|�dS(s`
Add a subscriber for an event.
:param event: The name of an event.
:param subscriber: The subscriber to be added (and called when the
event is published).
:param append: Whether to append or prepend the subscriber to an
existing subscriber list for the event.
N(R_RRYt
appendleft(R�teventt
subscriberRYtsubstsq((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR�Ns
cCs=|j}||kr(td|��n||j|�dS(s�
Remove a subscriber for an event.
:param event: The name of an event.
:param subscriber: The subscriber to be removed.
sNo subscribers: %rN(R_R�R�(R�RaRbRc((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR�bs cCst|jj|d��S(s�
Return an iterator for the subscribers for an event.
:param event: The event to return subscribers for.
((titerR_RI(R�Ra((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytget_subscribersnscOs�g}xa|j|�D]P}y||||�}Wn$tk
rXtjd�d}nX|j|�qWtjd||||�|S(s^
Publish a event and return a list of values returned by its
subscribers.
:param event: The event to publish.
:param args: The positional arguments to pass to the event's
subscribers.
:param kwargs: The keyword arguments to pass to the event's
subscribers.
s"Exception during event publications/publish %s: args = %s, kwargs = %s, result = %sN(RfRzR�RJR,RYR�(R�RatargstkwargsR6RbR�((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytpublishus
( R�R�R]R�RYR�R�RfRi(((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR^Gs t SequencercBsheZd�Zd�Zed�Zd�Zd�Zd�Zd�Z e
d��Ze
d��ZRS( cCs"i|_i|_t�|_dS(N(t_predst_succsR�t_nodes(R�((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR��s cCs|jj|�dS(N(RmR�(R�tnode((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytadd_node�scCs
||jkr"|jj|�n|r x3t|jj|d��D]}|j||�qDWx3t|jj|d��D]}|j||�qzWx6t|jj��D]\}}|s�|j|=q�q�Wx9t|jj��D]\}}|s�|j|=q�q�WndS(N(((RmR�R�RkRIRlR�Rx(R�RntedgesReR5R�R�((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytremove_node�s""""cCsB|jj|t��j|�|jj|t��j|�dS(N(Rkt
setdefaultR�R�Rl(R�tpredtsucc((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR��scCs�y|j|}|j|}Wn!tk
rAtd|��nXy|j|�|j|�Wn'tk
r�td||f��nXdS(Ns%r not a successor of anythings%r not a successor of %r(RkRltKeyErrorR�R�(R�RsRttpredstsuccs((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR��s
cCs+||jkp*||jkp*||jkS(N(RkRlRm(R�tstep((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytis_step�scCs�|j|�s"td|��ng}g}t�}|j|�x�|r�|jd�}||kr�||kr�|j|�|j|�q�qG|j|�|j|�|jj|d�}|j |�qGWt
|�S(NsUnknown: %ri((RyR�R�RYRFR�R�RkRItextendtreversed(R�tfinalR6ttodotseenRxRv((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyt get_steps�s"
csydg�g�i�i�g�|j��������fd��x'�D]}|�krR�|�qRqRW�S(Nics@�d�|<�d�|<�dcd7<�j|�y�|}Wntk
r`g}nXxl|D]d}|�kr��|�t�|�|��|<qh|�krht�|�|��|<qhqhW�|�|kr<g}x3tr�j�}|j|�||kr�Pq�q�Wt|�}�j|�ndS(Nii(RYRztminRYRFttuple(Rnt
successorst successortconnected_componentt component(tgraphtindext
index_countertlowlinksR6tstackt
strongconnect(s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR��s.
"
(Rl(R�Rn((R�R�R�R�R6R�R�s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytstrong_connections�s !"
cCs�dg}xF|jD];}|j|}x%|D]}|jd||f�q-WqWx"|jD]}|jd|�q\W|jd�dj|�S(Nsdigraph G {s %s -> %s;s %s;t}s
(RkRYRmR2(R�R6RtRvRsRn((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytdot
s
(
R�R�R�RoR�RqR�R�RyRtpropertyR�R�(((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyRj�s
3s.tar.gzs.tar.bz2s.tars.zips.tgzs.tbzs.whlc
s���fd�}tjj���t���d}|dkr�|jd�rZd}q�|jd�rxd}d}q�|jd�r�d}d}q�|jd
�r�d}d}q�td|��nz|dkrt|d�}|rZ|j�}x|D]}||�q�WqZnBt j
||�}|rZ|j�}x|D]}||�qCWn|dkr�tj
ddkr�xA|j�D]0} t| jt�s�| jjd�| _q�q�Wn|j��Wd|r�|j�nXdS(Ncs|t|t�s!|jd�}ntjjtjj�|��}|j��se|�tjkrxt d|��ndS(Nsutf-8spath outside destination: %r(
R^RtdecodeR?R@R�R2RCRAR�(R@Re(tdest_dirtplen(s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyt
check_paths
!#s.zips.whltzips.tar.gzs.tgzttgzsr:gzs.tar.bz2s.tbzttbzsr:bz2s.tarttarRFsUnknown format for %riisutf-8(s.zips.whl(s.tar.gzs.tgz(s.tar.bz2s.tbz(R?R@R�RBR,R%R�RtnamelistttarfileR�tgetnamesRXRrt
getmembersR^R&RR�t
extractallR~(
tarchive_filenameR�tformatR�R�tarchiveR�tnamesR&ttarinfo((R�R�s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyt unarchivesH
c Cs�tj�}t|�}t|d��}xutj|�D]d\}}}xR|D]J}tjj||�}||} tjj| |�}
|j||
�qPWq:WWdQX|S(s*zip a directory tree into a BytesIO objectR�N( tiotBytesIORBRR?twalkR@R2R�(t directoryR6tdlentzftrootR�R�R&tfulltrelRL((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytzip_dirSs
R$tKtMtGtTtPtProgresscBs�eZdZddd�Zd�Zd�Zd�Zd�Zed��Z ed ��Z
d
�Zed��Zed��Z
RS(
tUNKNOWNiidcCs8||_|_||_d|_d|_t|_dS(Ni(R�tcurtmaxR,tstartedtelapsedR�tdone(R�tminvaltmaxval((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR�js
cCsD||_tj�}|jdkr0||_n||j|_dS(N(R�ttimeR�R,R�(R�tcurvaltnow((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytupdaters
cCs|j|j|�dS(N(R�R�(R�tincr((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyt increment|scCs|j|j�|S(N(R�R�(R�((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR5�scCs/|jdk r"|j|j�nt|_dS(N(R�R,R�RYR�(R�((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytstop�scCs|jdkr|jS|jS(N(R�R,tunknown(R�((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytmaximum�scCsZ|jrd}nD|jdkr*d}n,d|j|j|j|j}d|}|S(Ns100 %s ?? %gY@s%3d %%(R�R�R,R�R�(R�R6R�((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyt
percentage�s "
cCsU|dkr|jdks-|j|jkr6d}ntjdtj|��}|S(Nis??:??:??s%H:%M:%S(R�R,R�R�R�tstrftimetgmtime(R�tdurationR6((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytformat_duration�s- cCs�|jrd}|j}n�d}|jdkr9d}ne|jdksZ|j|jkrcd}n;t|j|j�}||j|j:}|d|j}d||j|�fS(NtDonesETA i����iis%s: %s(R�R�R�R,R�R�tfloatR�(R�RMtt((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytETA�s ! cCsh|jdkrd}n|j|j|j}x(tD] }|dkrLPn|d:}q6Wd||fS(Nigi�g@�@s%d %sB/s(R�R�R�tUNITS(R�R6tunit((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytspeed�s
(R�R�R�R�R�R�R5R�R�R�R�R�R�R�(((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR�gs
s\{([^}]*)\}s[^/\\,{]\*\*|\*\*[^/\\,}]s^[^{]*\}|\{[^}]*$cCsZtj|�r(d}t||��ntj|�rPd}t||��nt|�S(sAExtended globbing function that supports ** and {opt1,opt2,opt3}.s7invalid glob %r: recursive glob "**" must be used alones2invalid glob %r: mismatching set marker '{' or '}'(t_CHECK_RECURSIVE_GLOBRR�t_CHECK_MISMATCH_SETt_iglob(t path_globR�((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR�sccsmtj|d�}t|�dkr~|\}}}x3|jd�D]4}x+tdj|||f��D]}|VqhWqCWn�d|kr�x�t|�D]}|Vq�Wn�|jdd�\}}|dkr�d}n|dkr�d}n|jd�}|jd�}x]tj|�D]L\}}} tj j
|�}x(ttj j||��D]}
|
VqVWqWdS( NiRR$s**RRBR=s\(t RICH_GLOBR4RBR�R2t std_iglobRCR?R�R@RW(R�trich_path_globRMR�RKtitemR@tradicaltdirR�R[((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR��s(% "(tHTTPSHandlertmatch_hostnametCertificateErrortHTTPSConnectioncBseZdZeZd�ZRS(c
Cs�tj|j|jf|j�}t|dt�rI||_|j�nt t
d�s�|jrmt
j}n t
j
}t
j||j|jd|dt
jd|j�|_n�t
jt
j�}|jt
jO_|jr�|j|j|j�ni}|jrHt
j|_|jd|j�tt
dt�rH|j|d<qHn|j||�|_|jr�|jr�y0t|jj�|j�tjd |j�Wq�tk
r�|jjtj�|jj ��q�XndS(
Nt_tunnel_hostt
SSLContextt cert_reqstssl_versiontca_certstcafiletHAS_SNItserver_hostnamesHost verified: %s(!R�tcreate_connectionthosttportttimeoutRZR�tsockt_tunnelRWtsslR�t
CERT_REQUIREDt CERT_NONEtwrap_sockettkey_filet cert_filetPROTOCOL_SSLv23R�toptionstOP_NO_SSLv2tload_cert_chaintverify_modetload_verify_locationstcheck_domainR�tgetpeercertR�R�R�tshutdownt SHUT_RDWRR~(R�R�R�tcontextRh((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytconnect�s>!
N(R�R�R,R�RYR�R�(((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR��sR�cBs&eZed�Zd�Zd�ZRS(cCs#tj|�||_||_dS(N(tBaseHTTPSHandlerR�R�R�(R�R�R�((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR�#s
cOs7t||�}|jr3|j|_|j|_n|S(s
This is called to create a connection instance. Normally you'd
pass a connection class to do_open, but it doesn't actually check for
a class, and just expects a callable. As long as we behave just as a
constructor would have, we should be OK. If it ever changes so that
we *must* pass a class, we'll create an UnsafeHTTPSConnection class
which just sets check_domain to False in the class definition, and
choose which one to pass to do_open.
(R�R�R�(R�RgRhR6((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyt_conn_maker(s
cCs_y|j|j|�SWnAtk
rZ}dt|j�krTtd|j��q[�nXdS(Nscertificate verify faileds*Unable to verify server certificate for %s(tdo_openR�RtstrtreasonR�R�(R�treqRO((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyt
https_open8s(R�R�RYR�R�R(((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR�"s tHTTPSOnlyHandlercBseZd�ZRS(cCstd|��dS(NsAUnexpected HTTP request on what should be a secure connection: %s(R(R�R((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyt http_openLs(R�R�R(((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyRKsiitHTTPcBseZddd�ZRS(R$cKs5|dkrd}n|j|j|||��dS(Ni(R,t_setupt_connection_class(R�R�R�Rh((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR�Xs N(R�R�R,R�(((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyRWstHTTPScBseZddd�ZRS(R$cKs5|dkrd}n|j|j|||��dS(Ni(R,RR (R�R�R�Rh((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR�`s N(R�R�R,R�(((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR
_st TransportcBseZdd�Zd�ZRS(icCs ||_tjj||�dS(N(R�RRR�(R�R�tuse_datetime((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR�gs cCs�|j|�\}}}tdkr<t|d|j�}nN|jsY||jdkr}||_|tj|�f|_n|jd}|S(NiiR�ii(ii(t
get_host_infot _ver_infoRR�t_connectiont_extra_headersRtHTTPConnection(R�R�thtehtx509R6((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytmake_connectionks
(R�R�R�R(((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyRfst
SafeTransportcBseZdd�Zd�ZRS(icCs ||_tjj||�dS(N(R�RRR�(R�R�R((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR�xs cCs�|j|�\}}}|s'i}n|j|d<tdkrUt|d|�}nT|jsr||jdkr�||_|tj|d|�f|_n|jd}|S(NR�iiii(ii( R
R�RR
R,RRRR�(R�R�RRRhR6((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR|s
(R�R�R�R(((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyRwstServerProxycBseZd�ZRS(c Ks�|jdd�|_}|dk r�t|�\}}|jdd�}|dkr^t}nt}||d|�|d<}||_ntj j
|||�dS(NR�Rithttpst transport(RFR,R�R
RIRRRRRR�( R�turiRhR�tschemet_RttclsR�((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR��s (R�R�R�(((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR�scKs:tjddkr |d7}n
d|d<t|||�S(NiitbR$tnewline(RXRrR�(R[R�Rh((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyt _csv_open�s
tCSVBasecBsGeZied�d6ed�d6ed�d6Zd�Zd�ZRS(Rt delimitert"t quotechars
tlineterminatorcCs|S(N((R�((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyt __enter__�scGs|jj�dS(N(RpR~(R�R((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyt__exit__�s(R�R�RtdefaultsR&R'(((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR!�s
t CSVReadercBs)eZd�Zd�Zd�ZeZRS(cKs�d|krM|d}tjddkrAtjd�|�}n||_nt|dd�|_tj|j|j�|_dS(NRpiisutf-8R@RF( RXRrRsRtRpR tcsvRNR((R�RhRp((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR��s
cCs|S(N((R�((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyt__iter__�scCskt|j�}tjddkrgxBt|�D]1\}}t|t�s/|jd�||<q/q/Wn|S(Niisutf-8(tnextRNRXRrR.R^RR�(R�R6R0R�((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR,�s(R�R�R�R+R,t__next__(((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR)�s t CSVWritercBseZd�Zd�ZRS(cKs1t|d�|_tj|j|j�|_dS(NR�(R RpR*twriterR((R�R[Rh((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR��scCsutjddkrag}x<|D]4}t|t�rG|jd�}n|j|�q W|}n|jj|�dS(Niisutf-8(RXRrR^RR�RYR/twriterow(R�trowRFR�((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR0�s
(R�R�R�R0(((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR.�s tConfiguratorcBsHeZeej�Zded<dd�Zd�Zd�Zd�Z RS(tinc_converttinccCs/tt|�j|�|p%tj�|_dS(N(tsuperR2R�R?R�RD(R�tconfigRD((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR��scs!��fd��|jd�}t|�s?�j|�}n|jdd�}|jdd�}|r�tg|D]}�|�^qs�}ng|D](}t|�r�|�||�f^q�}t|�}|||�} |rx3|j�D]"\}
}t| |
�|��q�Wn| S(Ncs�t|ttf�rCt|�g|D]}�|�^q%�}njt|t�r�d|krp�j|�}q�i}x4|D]}�||�||<q}Wn�j|�}|S(Ns()(R^R�R�ttypetdicttconfigure_customtconvert(toR0R6R�(R:R�(s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR:�s.
s()Rs[](( RFRRR,R�RR8Rxtsetattr(R�R6RftpropsRgR;R�RxRhR6R=R�((R:R�s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR9�s(5cCsI|j|}t|t�rEd|krE|j|�|j|<}n|S(Ns()(R6R^R8R9(R�RiR6((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyt__getitem__s
cCsatjj|�s-tjj|j|�}ntj|ddd��}tj|�}WdQX|S(s*Default converter for the inc:// protocol.RFR�sutf-8N( R?R@tisabsR2RDRsR�RvRw(R�R�R�R6((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR3s
N(
R�R�R8Rtvalue_convertersR,R�R9R>R3(((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR2�s
tSubprocessMixincBs)eZedd�Zd�Zd�ZRS(cCs||_||_dS(N(tverbosetprogress(R�RBRC((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR�s cCs�|j}|j}x{tr�|j�}|s1Pn|dk rM|||�q|sftjjd�ntjj|jd��tjj �qW|j
�dS(s�
Read lines from a subprocess' output stream and either pass to a progress
callable (if specified) or write progress information to sys.stderr.
Rsutf-8N(RCRBRYtreadlineR,RXtstderrR�R�tflushR~(R�RpR�RCRBR5((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyRN"s cKs�tj|dtjdtj|�}tjd|jd|jdf�}|j�tjd|jd|jdf�}|j�|j �|j
�|j
�|jdk r�|jdd�n|j
r�tjjd�n|S(NtstdoutRER�Rgsdone.tmainsdone.
(t
subprocesstPopentPIPEt threadingtThreadRNRGR5REtwaitR2RCR,RBRXR�(R�tcmdRhRett1tt2((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytrun_command7s$
$
N(R�R�R�R,R�RNRR(((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyRAs cCstjdd|�j�S(s,Normalize a python package name a la PEP 503s[-_.]+R3(R6tsubR`(R&((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytnormalize_nameHs(s.tar.gzs.tar.bz2s.tars.zips.tgzs.tbzs.whl(R$R�R�R�R�R�(ii(�RstcollectionsRt
contextlibR*tglobRR�R�RvtloggingR?R�R6RR�R�tImportErrorR,RIRXR�R�RRLtdummy_threadingR�R$RtcompatRRRRRR R
RRR
RRRRRRRRRt getLoggerR�R�tCOMMAR�R3tIDENTtEXTRA_IDENTtVERSPECtRELOPtBARE_CONSTRAINTSt
DIRECT_REFtCONSTRAINTSt
EXTRA_LISTtEXTRAStREQUIREMENTR-tRELOP_IDENTR0R<RTR[R_RgRjR�R�tcontextmanagerR�R�R�R�R�R�R�RRtVERBOSERRyR"R$R&R+R-R1tIR9R4R>R@RARHRPRRRSRURVR^RjtARCHIVE_EXTENSIONSRYR�R�R�R�R�R�R�R�R�R�R�R�R�RRrRRR
RRRR R!R)R.R2RART(((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyt<module>s�
�
. %
/
� )
,H�6 ] *)
:+
?>