Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Size: Mime:
B

Wi©&8­Ïã@sôddlZddlmZddlZddlZddlmZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZyddlZWnek
rŒdZYnXddlZddlZddlZddlZddlZyddlZWnek
rÞddlZYnXddlZddlmZddlmZmZmZmZm 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
 1e2¡Z3e
 4d¡Z5e
 4d¡Z6e
 4d	¡Z7e
 4d
¡Z8e
 4d¡Z9e
 4d¡Z:e
 4d
¡Z;e
 4d¡Z<dd„Z=dd„Z>dd„Z?dd„Z@dd„ZAd–dd„ZBdd„ZCdd„ZDdd „ZEejFd!d"„ƒZGejFd#d$„ƒZHejFd—d&d'„ƒZIGd(d)„d)eJƒZKd*d+„ZLGd,d-„d-eJƒZMd.d/„ZNGd0d1„d1eJƒZOe
 4d2e
jP¡ZQd3d4„ZRd˜d5d6„ZSd7d8„ZTd9d:„ZUd;d<„ZVd=d>„ZWd?d@„ZXe
 4dAe
jY¡ZZe
 4dB¡Z[d™dCdD„Z\e
 4dE¡Z]dFdG„Z^dHdI„Z_dJdK„Z`dLZadMdN„ZbdOdP„ZcGdQdR„dReJƒZdGdSdT„dTeJƒZeGdUdV„dVeJƒZfdWZgdšdYdZ„Zhd[d\„Zid]ZjGd^d_„d_eJƒZke
 4d`¡Zle
 4da¡Zme
 4db¡Zndcdd„Zdedf„ZoerÖddglmpZqmrZrmsZsGdhdi„die$jtƒZtGdjdk„dkeqƒZpGdldm„dmepe'ƒZuejvddn…ZwewdokrGdpdq„dqe$jxƒZxerGdrds„dse$jyƒZyGdtdu„due%jzƒZzerBGdvdw„dwe%j{ƒZ{Gdxdy„dye%j|ƒZ|dzd{„Z}Gd|d}„d}eJƒZ~Gd~d„de~ƒZGd€d„de~ƒZ€Gd‚dƒ„dƒe(ƒZGd„d…„d…eJƒZ‚d†d‡„ZƒGdˆd‰„d‰eJƒZ„dŠd‹„Z…dŒd„Z†dŽd„Z‡dd‘d’d“œZˆd”d•„Z‰dS)›éN)Údeque)Úiglobé)ÚDistlibException)Ústring_typesÚ	text_typeÚshutilÚ	raw_inputÚStringIOÚcache_from_sourceÚurlopenÚurljoinÚhttplibÚ	xmlrpclibÚ	splittypeÚHTTPHandlerÚBaseConfiguratorÚvalid_identÚ	ContainerÚconfigparserÚURLErrorÚZipFileÚfsdecodeÚunquoteÚurlparsez^([\w\.-]+)\s*z^([\w\.*+-]+)\s*z^(<=?|>=?|={2,3}|[~!]=)\s*z*^((<=?)|(>=?)|={2,3}|[~!]=|in|not\s+in)\s*z^or\b\s*z	^and\b\s*z(\S+)\s*z(([\s\w\.{}()*+#:;,/?!~`@$%^&=|<>\[\]-]+)cs6dd„‰‡‡fdd„‰‡fdd„‰‡fdd„‰ˆ|ƒS)	ae
    Parse a marker string and return a dictionary containing a marker expression.

    The dictionary will contain keys "op", "lhs" and "rhs" for non-terminals in
    the expression grammar, or strings. A string contained in quotes is to be
    interpreted as a literal string, and a string not contained in quotes is a
    variable (such as os_name).
    cSs0t |¡}|r,| ¡d}|| ¡d…}nü|s:tdƒ‚nî|d}|dkrVtd|ƒ‚d |d¡}|dd…}|g}xŽ|rì|d|krŠPqv|d|kr®| |¡|dd…}qvt |¡}|sÈtd|ƒ‚| | ¡d¡|| ¡d…}qvWd |¡}td|ƒ‚| |¡d |¡}|dd… 	¡}||fS)	Nrzunexpected end of inputz'"zinvalid expression: %sÚrzerror in string literal: %szunterminated string: %s)
Ú
IDENTIFIERÚmatchÚgroupsÚendÚSyntaxErrorÚreplaceÚappendÚSTRING_CHUNKÚjoinÚlstrip)Ú	remainingÚmÚresultÚqÚoqÚpartsÚs©r-úŠ/build/wlanpi-profiler-SHjkbd/wlanpi-profiler-1.0.8/debian/wlanpi-profiler/opt/wlanpi-profiler/lib/python3.7/site-packages/distlib/util.pyÚ
marker_varAs:






z parse_marker.<locals>.marker_varcs¸|rR|ddkrRˆ|dd… ¡ƒ\}}|ddkr@td|ƒ‚|dd… ¡}n^ˆ|ƒ\}}xL|rªt |¡}|stP| ¡d}|| ¡d…}ˆ|ƒ\}}|||dœ}q`W|}||fS)Nrú(rú)zunterminated parenthesis: %s)ÚopÚlhsÚrhs)r%r Ú	MARKER_OPrrr)r&r(r3r'r2r4)Úmarkerr/r-r.Úmarker_expres 
z!parse_marker.<locals>.marker_exprcsVˆ|ƒ\}}x@|rLt |¡}|s"P|| ¡d…}ˆ|ƒ\}}d||dœ}qW||fS)NÚand)r2r3r4)ÚANDrr)r&r3r'r4)r7r-r.Ú
marker_andxs
z parse_marker.<locals>.marker_andcsVˆ|ƒ\}}x@|rLt |¡}|s"P|| ¡d…}ˆ|ƒ\}}d||dœ}qW||fS)NÚor)r2r3r4)ÚORrr)r&r3r'r4)r:r-r.r6ƒs
zparse_marker.<locals>.markerr-)Ú
marker_stringr-)r6r:r7r/r.Úparse_marker8s
	$r>cCs2| ¡}|r| d¡rdSt |¡}|s4td|ƒ‚| ¡d}|| ¡d…}d}}}}|r<|ddkr<| dd¡}|dkr”td|ƒ‚|d|…}	||dd… ¡}g}xx|	r0t |	¡}|sÚtd	|	ƒ‚| 	| ¡d¡|	| ¡d…}	|	sP|	dd
krtd|	ƒ‚|	dd… ¡}	qºW|s<d}|rš|ddkrÂ|dd… ¡}t
 |¡}|s|td
|ƒ‚| ¡d}t|ƒ}
|
jr |
j
s¬td|ƒ‚|| ¡d… ¡}nØdd„}|ddkræ||ƒ\}}n´| dd¡}|dkrtd|ƒ‚|d|…}	||dd… ¡}t |	¡rB||	ƒ\}}nXt |	¡}|s^td|	ƒ‚| ¡d}
|	| ¡d… ¡}	|	rtd|	ƒ‚d|
fg}|rÖ|ddkrºtd|ƒ‚|dd… ¡}t|ƒ\}}|rö|ddkrötd|ƒ‚|s|}nd|d dd„|Dƒ¡f}t||||||dS)zŠ
    Parse a requirement passed in as a string. Return a Container
    whose attributes contain the various parts of the requirement.
    ú#Nzname expected: %srú[ú]rzunterminated extra: %szmalformed extra: %sú,zcomma expected in extras: %sú@zinvalid URI: %szInvalid URL: %scSsÎt |¡}d}|rÆg}x¦| ¡d}|| ¡d…}t |¡}|sNtd|ƒ‚| ¡d}| ||f¡|| ¡d…}|rˆ|ddkrŠP|dd… ¡}|s Pt |¡}|std|ƒ‚qW|sÆd}||fS)z|
                Return a list of operator, version tuples if any are
                specified, else None.
                Nrzinvalid version: %srBrzinvalid constraint: %s)Ú
COMPARE_OPrrrÚVERSION_IDENTIFIERr r"r%)Ú
ver_remainingr'Úversionsr2Úvr-r-r.Úget_versionsÅs0


z'parse_requirement.<locals>.get_versionsr0r1zunterminated parenthesis: %szinvalid constraint: %sz~=ú;zinvalid requirement: %szunexpected trailing data: %sz%s %sz, cSsg|]}d|‘qS)z%s %sr-)Ú.0Úconr-r-r.ú
<listcomp>	sz%parse_requirement.<locals>.<listcomp>)ÚnameÚextrasÚconstraintsr6ÚurlÚrequirement)ÚstripÚ
startswithrrr rrÚfindr%r"Ú	NON_SPACErÚschemeÚnetlocrDrEr>r$r)Úreqr&r'ÚdistnamerOÚ	mark_exprrGÚuriÚir,ÚtrIÚ_rHÚrsr-r-r.Úparse_requirement‘sŒ


 


racCs´dd„}i}x¢|D]š\}}}tj ||¡}x€t|ƒD]t}tj ||¡}	x`t|	ƒD]T}
|||
ƒ}|dkrt| |d¡qP|||
ƒ}| tjjd¡ d¡}
|
d|||<qPWq4WqW|S)z%Find destinations for resources filescSsD| tjjd¡}| tjjd¡}| |¡s.t‚|t|ƒd… d¡S)Nú/)r!ÚosÚpathÚseprTÚAssertionErrorÚlenr%)Úrootrdr-r-r.Úget_rel_pathsz)get_resources_dests.<locals>.get_rel_pathNrb)rcrdr$rÚpopr!reÚrstrip)Úresources_rootÚrulesriÚdestinationsÚbaseÚsuffixÚdestÚprefixÚabs_baseÚabs_globÚabs_pathÚ
resource_fileÚrel_pathÚrel_destr-r-r.Úget_resources_destss

rycCs(ttdƒrd}ntjttdtjƒk}|S)NÚreal_prefixTÚbase_prefix)ÚhasattrÚsysrrÚgetattr)r(r-r-r.Úin_venv(s
rcCstj}t|tƒst|ƒ}|S)N)r}Ú
executableÚ
isinstancerr)r(r-r-r.Úget_executable2s
r‚cCsR|}xHt|ƒ}|}|s|r|}|r|d ¡}||kr8P|rd|||f}qW|S)Nrz	%c: %s
%s)r	Úlower)ÚpromptÚ
allowed_charsÚerror_promptÚdefaultÚpr,Úcr-r-r.ÚproceedDsrŠcCs<t|tƒr| ¡}i}x |D]}||kr||||<qW|S)N)rrÚsplit)ÚdÚkeysr(Úkeyr-r-r.Úextract_by_keyTs

rcCsˆtjddkrt d¡|ƒ}| ¡}t|ƒ}yrt |¡}|ddd}xR| ¡D]F\}}x<| ¡D]0\}}d||f}t	|ƒ}	|	dk	sŒt
‚|	||<qdWqRW|Stk
r¾| dd¡YnXdd	„}
t
 ¡}y|
||ƒWn<t
jk
r| ¡t |¡}t|ƒ}|
||ƒYnXi}xb| ¡D]V}i||<}xB| |¡D]4\}
}d|
|f}t	|ƒ}	|	dk	spt
‚|	||
<qFWq*W|S)
Nrézutf-8Ú
extensionszpython.exportsÚexportsz%s = %scSs$t|dƒr| |¡n
| |¡dS)NÚ	read_file)r|r“Úreadfp)ÚcpÚstreamr-r-r.Úread_streamqs
z!read_exports.<locals>.read_stream)r}Úversion_infoÚcodecsÚ	getreaderÚreadr
ÚjsonÚloadÚitemsÚget_export_entryrfÚ	ExceptionÚseekrÚConfigParserÚMissingSectionHeaderErrorÚcloseÚtextwrapÚdedentÚsections)r–ÚdataÚjdatar(ÚgroupÚentriesÚkrHr,Úentryr—r•rŽrNÚvaluer-r-r.Úread_exports]sD

r¯cCs°tjddkrt d¡|ƒ}t ¡}x|| ¡D]p\}}| |¡x\| ¡D]P}|j	dkr`|j
}nd|j
|j	f}|jrŠd|d |j¡f}| 
||j|¡qJWq.W| |¡dS)Nrrzutf-8z%s:%sz%s [%s]z, )r}r˜r™Ú	getwriterrr¢ržÚadd_sectionÚvaluesrprrÚflagsr$ÚsetrNÚwrite)r’r–r•r¬rHr­r,r-r-r.Ú
write_exportsŒs

r¶c	cs$t ¡}z
|VWdt |¡XdS)N)ÚtempfileÚmkdtemprÚrmtree)Útdr-r-r.ÚtempdirŸs
r»c	cs.t ¡}zt |¡dVWdt |¡XdS)N)rcÚgetcwdÚchdir)rŒÚcwdr-r-r.r½§s


r½éc	cs.t ¡}zt |¡dVWdt |¡XdS)N)ÚsocketÚgetdefaulttimeoutÚsetdefaulttimeout)ÚsecondsÚctor-r-r.Úsocket_timeout±s


rÅc@seZdZdd„Zddd„ZdS)Úcached_propertycCs
||_dS)N)Úfunc)ÚselfrÇr-r-r.Ú__init__¼szcached_property.__init__NcCs,|dkr|S| |¡}t ||jj|¡|S)N)rÇÚobjectÚ__setattr__Ú__name__)rÈÚobjÚclsr®r-r-r.Ú__get__Ás

zcached_property.__get__)N)rÌÚ
__module__Ú__qualname__rÉrÏr-r-r-r.rÆ»srÆcCs‚tjdkr|S|s|S|ddkr.td|ƒ‚|ddkrFtd|ƒ‚| d¡}xtj|krj| tj¡qRW|svtjStjj|ŽS)aÐ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.
    rbrzpath '%s' cannot be absoluteéÿÿÿÿzpath '%s' cannot end with '/')rcreÚ
ValueErrorr‹ÚcurdirÚremoverdr$)ÚpathnameÚpathsr-r-r.Úconvert_pathÉs


rØc@s”eZdZd$dd„Zdd„Zdd„Zdd	„Zd%dd„Zd&dd„Zdd„Z	dd„Z
dd„Zdd„Zdd„Z
d'dd„Zdd„Zdd„Zd d!„Zd"d#„Zd
S)(ÚFileOperatorFcCs||_tƒ|_| ¡dS)N)Údry_runr´ÚensuredÚ_init_record)rÈrÚr-r-r.rÉåszFileOperator.__init__cCsd|_tƒ|_tƒ|_dS)NF)Úrecordr´Ú
files_writtenÚdirs_created)rÈr-r-r.rÜêszFileOperator._init_recordcCs|jr|j |¡dS)N)rÝrÞÚadd)rÈrdr-r-r.Úrecord_as_writtenïszFileOperator.record_as_writtencCsHtj |¡s tdtj |¡ƒ‚tj |¡s0dSt |¡jt |¡jkS)aÎ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".
        zfile '%r' does not existT)rcrdÚexistsrÚabspathÚstatÚst_mtime)rÈÚsourceÚtargetr-r-r.ÚnewerószFileOperator.newerTcCsŽ| tj |¡¡t d||¡|js€d}|rdtj |¡rDd|}n tj |¡rdtj 	|¡sdd|}|rtt
|dƒ‚t ||¡| 
|¡dS)z8Copy a file respecting dry-run and force flags.
        zCopying %s to %sNz%s is a symlinkz%s is a non-regular filez which would be overwritten)Ú
ensure_dirrcrdÚdirnameÚloggerÚinforÚÚislinkrâÚisfilerÓrÚcopyfilerá)rÈÚinfileÚoutfileÚcheckÚmsgr-r-r.Ú	copy_files
zFileOperator.copy_fileNcCs„tj |¡rt‚| tj |¡¡t d||¡|jsv|dkrJt	|dƒ}nt
j	|d|d}zt ||¡Wd| 
¡X| |¡dS)NzCopying stream %s to %sÚwbÚw)Úencoding)rcrdÚisdirrfrérêrërìrÚÚopenr™rÚcopyfileobjr¤rá)rÈÚinstreamrñr÷Ú	outstreamr-r-r.Úcopy_streams
zFileOperator.copy_streamc	Cs\| tj |¡¡|jsNtj |¡r.t |¡t|dƒ}| |¡WdQRX| 	|¡dS)Nrõ)
rércrdrêrÚrârÕrùrµrá)rÈrdr¨Úfr-r-r.Úwrite_binary_file's
zFileOperator.write_binary_filecCs| || |¡¡dS)N)rÿÚencode)rÈrdr¨r÷r-r-r.Úwrite_text_file0szFileOperator.write_text_filecCsrtjdkstjdkrntjdkrnxN|D]F}|jr<t d|¡q$t |¡j|B|@}t d||¡t ||¡q$WdS)NÚposixÚjavazchanging mode of %szchanging mode of %s to %o)	rcrNÚ_namerÚrërìräÚst_modeÚchmod)rÈÚbitsÚmaskÚfilesrþÚmoder-r-r.Úset_mode3s
zFileOperator.set_modecCs| dd|¡S)Nimiÿ)r)r,rþr-r-r.Ú<lambda>?ózFileOperator.<lambda>cCs|tj |¡}||jkrxtj |¡sx|j |¡tj |¡\}}| |¡t 	d|¡|j
sft |¡|jrx|j
 |¡dS)NzCreating %s)rcrdrãrÛrâràr‹rérërìrÚÚmkdirrÝrß)rÈrdrŒrþr-r-r.réAs

zFileOperator.ensure_dirc	Cs˜t||ƒ}t d||¡|jsŠ|s0| ||¡rX|s:d}n| |¡sHt‚|t|ƒd…}i}|rvtt	dƒrvt	j
j|d<t	j|||df|Ž| 
|¡|S)NzByte-compiling %s to %sÚPycInvalidationModeÚinvalidation_modeT)rrërìrÚrèrTrfrgr|Ú
py_compilerÚCHECKED_HASHÚcompilerá)	rÈrdÚoptimizeÚforcerrÚhashed_invalidationÚdpathÚdiagpathÚcompile_kwargsr-r-r.Úbyte_compileMs
zFileOperator.byte_compilecCs²tj |¡r®tj |¡r^tj |¡s^t d|¡|js@t 	|¡|j
r®||jkr®|j |¡nPtj |¡rpd}nd}t d||¡|js’t |¡|j
r®||j
kr®|j
 |¡dS)NzRemoving directory tree at %sÚlinkÚfilezRemoving %s %s)rcrdrârørírëÚdebugrÚrr¹rÝrßrÕrÞ)rÈrdr,r-r-r.Úensure_removed^s"



zFileOperator.ensure_removedcCsHd}x>|sBtj |¡r&t |tj¡}Ptj |¡}||kr<P|}qW|S)NF)rcrdrâÚaccessÚW_OKrê)rÈrdr(Úparentr-r-r.Úis_writablesszFileOperator.is_writablecCs"|js
t‚|j|jf}| ¡|S)zV
        Commit recorded changes, turn off recording, return
        changes.
        )rÝrfrÞrßrÜ)rÈr(r-r-r.Úcommits
zFileOperator.commitcCsš|jsŽx(t|jƒD]}tj |¡rt |¡qWt|jdd}xN|D]F}t 	|¡}|r€|dgksdt
‚tj ||d¡}t |¡t |¡qDW| 
¡dS)NT)ÚreverseÚ__pycache__r)rÚÚlistrÞrcrdrârÕÚsortedrßÚlistdirrfr$ÚrmdirrÜ)rÈrþÚdirsrŒÚflistÚsdr-r-r.Úrollback‰s


zFileOperator.rollback)F)T)N)FFNF)rÌrÐrÑrÉrÜrárèrôrýrÿrrÚset_executable_moderérrr"r#r-r-r-r-r.rÙäs 


	

rÙcCsb|tjkrtj|}nt|ƒ}|dkr,|}n2| d¡}t|| d¡ƒ}x|D]}t||ƒ}qLW|S)NÚ.r)r}ÚmodulesÚ
__import__r‹r~rj)Úmodule_nameÚdotted_pathÚmodr(r+rˆr-r-r.Úresolve›s


r5c@s6eZdZdd„Zedd„ƒZdd„Zdd„Zej	Z	d	S)
ÚExportEntrycCs||_||_||_||_dS)N)rNrrrpr³)rÈrNrrrpr³r-r-r.rÉ«szExportEntry.__init__cCst|j|jƒS)N)r5rrrp)rÈr-r-r.r®±szExportEntry.valuecCsd|j|j|j|jfS)Nz<ExportEntry %s = %s:%s %s>)rNrrrpr³)rÈr-r-r.Ú__repr__µs
zExportEntry.__repr__cCsDt|tƒsd}n0|j|jko>|j|jko>|j|jko>|j|jk}|S)NF)rr6rNrrrpr³)rÈÚotherr(r-r-r.Ú__eq__¹s
zExportEntry.__eq__N)
rÌrÐrÑrÉrÆr®r7r9rÊÚ__hash__r-r-r-r.r6ªs

r6z¸(?P<name>(\w|[-.+])+)
                      \s*=\s*(?P<callable>(\w+)([:\.]\w+)*)
                      \s*(\[\s*(?P<flags>[\w-]+(=\w+)?(,\s*\w+(=\w+)?)*)\s*\])?
                      c
Csàt |¡}|s0d}d|ks"d|krÜtd|ƒ‚n¬| ¡}|d}|d}| d¡}|dkrf|d}}n"|dkrztd|ƒ‚| d¡\}}|d	}	|	dkrºd|ks¨d|kr´td|ƒ‚g}	nd
d„|	 d¡Dƒ}	t||||	ƒ}|S)
Nr@rAzInvalid specification '%s'rNÚcallableú:rrr³cSsg|]}| ¡‘qSr-)rS)rKrþr-r-r.rMåsz$get_export_entry.<locals>.<listcomp>rB)ÚENTRY_REÚsearchrÚ	groupdictÚcountr‹r6)
Ú
specificationr'r(rŒrNrdÚcolonsrrrpr³r-r-r.rŸËs2


rŸcCsÈ|dkrd}tjdkr.dtjkr.tj d¡}ntj d¡}tj |¡rft |tj¡}|s¢t	 
d|¡n<yt |¡d}Wn(tk
r t	j
d	|dd
d}YnX|sºt
 ¡}t	 
d|¡tj ||¡S)
a¦
    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``.
    Nz.distlibÚntÚLOCALAPPDATAz
$localappdataú~z(Directory exists but is not writable: %sTzUnable to create %s)Úexc_infoFz#Default location unusable, using %s)rcrNÚenvironrdÚ
expandvarsÚ
expanduserrørr rëÚwarningÚmakedirsÚOSErrorr·r¸r$)rpr(Úusabler-r-r.Úget_cache_baseês&

rNcCsBtj tj |¡¡\}}|r(| dd¡}| tjd¡}||dS)a
    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.
    r<z---z--z.cache)rcrdÚ
splitdriverãr!re)rdrŒrˆr-r-r.Úpath_to_cache_dirs

rPcCs| d¡s|dS|S)Nrb)Úendswith)r,r-r-r.Úensure_slash$s
rRcCs`d}}d|kr>| dd¡\}}d|kr.|}n| dd¡\}}|rJt|ƒ}|rVt|ƒ}|||fS)NrCrr<)Úrsplitr‹r)rXÚusernameÚpasswordrrr-r-r.Úparse_credentials*srVcCst d¡}t |¡|S)Né)rcÚumask)r(r-r-r.Úget_process_umask9s

rYcCs>d}d}x$t|ƒD]\}}t|tƒsd}PqW|dk	s:t‚|S)NTF)Ú	enumeraterrrf)Úseqr(r]r,r-r-r.Úis_string_sequence>s
r\z3([a-z0-9_]+([.-][a-z_][a-z0-9_]*)*)-([a-z0-9_.+-]+)z
-py(\d\.?\d?)cCsÈd}d}t|ƒ dd¡}t |¡}|r@| d¡}|d| ¡…}|r˜t|ƒt|ƒdkr˜t t 	|¡d|¡}|r˜| 
¡}|d|…||dd…|f}|dkrÄt |¡}|rÄ| d¡| d¡|f}|S)zw
    Extract name, version, python version from a filename (no extension)

    Return name, version, pyver or None
    Nú ú-rz\br)rr!ÚPYTHON_VERSIONr>rªÚstartrgÚrerÚescaperÚPROJECT_NAME_AND_VERSION)ÚfilenameÚproject_namer(Úpyverr'Únr-r-r.Úsplit_filenameMs"


rhz-(?P<name>[\w .-]+)\s*\(\s*(?P<ver>[^\s)]+)\)$cCs:t |¡}|std|ƒ‚| ¡}|d ¡ ¡|dfS)zÇ
    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.
    z$Ill-formed name/version string: '%s'rNÚver)ÚNAME_VERSION_RErrr?rSrƒ)rˆr'rŒr-r-r.Úparse_name_and_versionis
	
rkcCs¾tƒ}t|pgƒ}t|pgƒ}d|kr8| d¡||O}x€|D]x}|dkrV| |¡q>| d¡r–|dd…}||kr‚t d|¡||kr¶| |¡q>||kr¬t d|¡| |¡q>W|S)NÚ*r^rzundeclared extra: %s)r´rÕràrTrërJ)Ú	requestedÚ	availabler(ÚrÚunwantedr-r-r.Ú
get_extrasxs&


rqc
Csˆi}yNt|ƒ}| ¡}| d¡}| d¡s8t d|¡nt d¡|ƒ}t 	|¡}Wn0t
k
r‚}zt d||¡Wdd}~XYnX|S)NzContent-Typezapplication/jsonz(Unexpected response for JSON request: %szutf-8z&Failed to get external data for %s: %s)rrìÚgetrTrërr™ršrœrr Ú	exception)rQr(ÚrespÚheadersÚctÚreaderÚer-r-r.Ú_get_external_data‘s

 ryz'https://www.red-dove.com/pypi/projects/cCs*d|d ¡|f}tt|ƒ}t|ƒ}|S)Nz%s/%s/project.jsonr)Úupperr
Ú_external_data_base_urlry)rNrQr(r-r-r.Úget_project_data§s
r|cCs(d|d ¡||f}tt|ƒ}t|ƒS)Nz%s/%s/package-%s.jsonr)rzr
r{ry)rNÚversionrQr-r-r.Úget_package_data­s
r~c@s(eZdZdZdd„Zdd„Zdd„ZdS)	ÚCachezæ
    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.
    cCsPtj |¡st |¡t |¡jd@dkr6t d|¡tj tj 	|¡¡|_
dS)zu
        Initialise an instance.

        :param base: The base directory where the cache should be located.
        é?rzDirectory '%s' is not privateN)rcrdrørKrärrërJrãÚnormpathro)rÈror-r-r.rɺs

zCache.__init__cCst|ƒS)zN
        Converts a resource prefix to a directory name in the cache.
        )rP)rÈrrr-r-r.Ú
prefix_to_dirÈszCache.prefix_to_dirc	CsŒg}x‚t |j¡D]r}tj |j|¡}y>tj |¡s@tj |¡rLt |¡ntj |¡rbt	 
|¡Wqtk
r‚| |¡YqXqW|S)z"
        Clear the cache.
        )
rcr(rordr$rírîrÕrørr¹r r")rÈÚnot_removedÚfnr-r-r.ÚclearÎszCache.clearN)rÌrÐrÑÚ__doc__rÉr‚r…r-r-r-r.r³src@s:eZdZdZdd„Zddd„Zdd„Zd	d
„Zdd„Zd
S)Ú
EventMixinz1
    A very simple publish/subscribe system.
    cCs
i|_dS)N)Ú_subscribers)rÈr-r-r.rÉãszEventMixin.__init__TcCsD|j}||krt|gƒ||<n"||}|r6| |¡n
| |¡dS)a`
        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ˆrr"Ú
appendleft)rÈÚeventÚ
subscriberr"ÚsubsÚsqr-r-r.ràæs
zEventMixin.addcCs,|j}||krtd|ƒ‚|| |¡dS)z™
        Remove a subscriber for an event.

        :param event: The name of an event.
        :param subscriber: The subscriber to be removed.
        zNo subscribers: %rN)rˆrÓrÕ)rÈrŠr‹rŒr-r-r.rÕúszEventMixin.removecCst|j |d¡ƒS)z
        Return an iterator for the subscribers for an event.
        :param event: The event to return subscribers for.
        r-)Úiterrˆrr)rÈrŠr-r-r.Úget_subscribersszEventMixin.get_subscribersc	Ospg}xT| |¡D]F}y||f|ž|Ž}Wn"tk
rJt d¡d}YnX| |¡qWt d||||¡|S)a^
        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.
        z"Exception during event publicationNz/publish %s: args = %s, kwargs = %s, result = %s)rr rërsr"r)rÈrŠÚargsÚkwargsr(r‹r®r-r-r.Úpublish
s

zEventMixin.publishN)T)	rÌrÐrÑr†rÉràrÕrr’r-r-r-r.r‡ßs
r‡c@s^eZdZdd„Zdd„Zddd„Zdd	„Zd
d„Zdd
„Zdd„Z	e
dd„ƒZe
dd„ƒZdS)Ú	SequencercCsi|_i|_tƒ|_dS)N)Ú_predsÚ_succsr´Ú_nodes)rÈr-r-r.rÉ(szSequencer.__init__cCs|j |¡dS)N)r–rà)rÈÚnoder-r-r.Úadd_node-szSequencer.add_nodeFcCs¾||jkr|j |¡|rºx&t|j |d¡ƒD]}| ||¡q.Wx&t|j |d¡ƒD]}| ||¡qVWx&t|j ¡ƒD]\}}|sz|j|=qzWx&t|j ¡ƒD]\}}|s¢|j|=q¢WdS)Nr-)r–rÕr´r”rrr•r&rž)rÈr—Úedgesrˆr,r¬rHr-r-r.Úremove_node0s
zSequencer.remove_nodecCs<||kst‚|j |tƒ¡ |¡|j |tƒ¡ |¡dS)N)rfr”Ú
setdefaultr´ràr•)rÈÚpredÚsuccr-r-r.rà@sz
Sequencer.addcCsˆ||kst‚y|j|}|j|}Wn tk
rDtd|ƒ‚YnXy| |¡| |¡Wn$tk
r‚td||fƒ‚YnXdS)Nz%r not a successor of anythingz%r not a successor of %r)rfr”r•ÚKeyErrorrÓrÕ)rÈrœrÚpredsÚsuccsr-r-r.rÕEs

zSequencer.removecCs||jkp||jkp||jkS)N)r”r•r–)rÈÚstepr-r-r.Úis_stepRszSequencer.is_stepcCsœ| |¡std|ƒ‚g}g}tƒ}| |¡xd|r’| d¡}||krd||kr| |¡| |¡q0| |¡| |¡|j |d¡}| 	|¡q0Wt
|ƒS)NzUnknown: %rrr-)r¢rÓr´r"rjrÕràr”rrÚextendÚreversed)rÈÚfinalr(ÚtodoÚseenr¡rŸr-r-r.Ú	get_stepsVs"





zSequencer.get_stepscsVdg‰g‰i‰i‰g‰|j‰‡‡‡‡‡‡‡fdd„‰xˆD]}|ˆkr:ˆ|ƒq:WˆS)Nrcsøˆdˆ|<ˆdˆ|<ˆdd7<ˆ |¡yˆ|}Wntk
rVg}YnXxR|D]J}|ˆkrŠˆ|ƒtˆ|ˆ|ƒˆ|<q^|ˆkr^tˆ|ˆ|ƒˆ|<q^Wˆ|ˆ|krôg}x ˆ ¡}| |¡||krÂPqÂWt|ƒ}ˆ |¡dS)Nrr)r"r ÚminrjÚtuple)r—Ú
successorsÚ	successorÚconnected_componentÚ	component)ÚgraphÚindexÚ
index_counterÚlowlinksr(ÚstackÚ
strongconnectr-r.r´zs.



z3Sequencer.strong_connections.<locals>.strongconnect)r•)rÈr—r-)r¯r°r±r²r(r³r´r.Ústrong_connectionsos"
zSequencer.strong_connectionscCsrdg}x8|jD].}|j|}x|D]}| d||f¡q"WqWx|jD]}| d|¡qHW| d¡d |¡S)Nzdigraph G {z  %s -> %s;z  %s;Ú}Ú
)r”r"r–r$)rÈr(rrŸrœr—r-r-r.Údot¢s


z
Sequencer.dotN)F)
rÌrÐrÑrÉr˜ršràrÕr¢r¨Úpropertyrµr¸r-r-r-r.r“'s

3r“)z.tar.gzz.tar.bz2z.tarz.zipz.tgzz.tbzz.whlTc
sX‡‡fdd„}tj ˆ¡‰tˆƒ‰d}|dkr†| d¡r>d}nH| d¡rRd}d}n4| d¡rfd	}d
}n | d¡rzd}d
}ntd|ƒ‚z¼|dkr¾t|d
ƒ}|rì| ¡}xD|D]}||ƒq¬Wn.t 	||¡}|rì| 
¡}x|D]}||ƒqÜW|dkr6tjddkr6x.| 
¡D]"}	t|	jtƒs|	j d¡|	_qW| ˆ¡Wd|rR| ¡XdS)NcsRt|tƒs| d¡}tj tj ˆ|¡¡}| ˆ¡rB|ˆtjkrNt	d|ƒ‚dS)Nzutf-8zpath outside destination: %r)
rrÚdecodercrdrãr$rTrerÓ)rdrˆ)Údest_dirÚplenr-r.Ú
check_path·s


zunarchive.<locals>.check_path)z.zipz.whlÚzip)z.tar.gzz.tgzÚtgzzr:gz)z.tar.bz2z.tbzÚtbzzr:bz2z.tarÚtarrozUnknown format for %rrrzutf-8)rcrdrãrgrQrÓrÚnamelistÚtarfilerùÚgetnamesr}r˜Ú
getmembersrrNrrºÚ
extractallr¤)
Úarchive_filenamer»Úformatròr½Úarchiver
ÚnamesrNÚtarinfor-)r»r¼r.Ú	unarchiveµsH






rÌc	Cs†t ¡}t|ƒ}t|dƒb}xZt |¡D]L\}}}x@|D]8}tj ||¡}||d…}	tj |	|¡}
| ||
¡q8Wq(WWdQRX|S)z*zip a directory tree into a BytesIO objectröN)	ÚioÚBytesIOrgrrcÚwalkrdr$rµ)Ú	directoryr(ÚdlenÚzfrhr*r	rNÚfullÚrelrqr-r-r.Úzip_dirës
rÕ)rÚKÚMÚGÚTÚPc@sreZdZdZddd„Zdd„Zdd	„Zd
d„Zdd
„Ze	dd„ƒZ
e	dd„ƒZdd„Ze	dd„ƒZ
e	dd„ƒZdS)ÚProgressÚUNKNOWNrédcCs<|dks||kst‚||_|_||_d|_d|_d|_dS)NrF)rfr©ÚcurÚmaxÚstartedÚelapsedÚdone)rÈÚminvalÚmaxvalr-r-r.rÉszProgress.__init__cCsV|j|kst‚|jdks&||jks&t‚||_t ¡}|jdkrF||_n||j|_dS)N)r©rfrßrÞÚtimeràrá)rÈÚcurvalÚnowr-r-r.Úupdate
s
zProgress.updatecCs |dkst‚| |j|¡dS)Nr)rfrèrÞ)rÈÚincrr-r-r.Ú	incrementszProgress.incrementcCs| |j¡|S)N)rèr©)rÈr-r-r.r`szProgress.startcCs |jdk	r| |j¡d|_dS)NT)rßrèrâ)rÈr-r-r.Ústops
z
Progress.stopcCs|jdkr|jS|jS)N)rßÚunknown)rÈr-r-r.Úmaximum!szProgress.maximumcCsD|jrd}n4|jdkrd}n$d|j|j|j|j}d|}|S)Nz100 %z ?? %gY@z%3d %%)rârßrÞr©)rÈr(rHr-r-r.Ú
percentage%s
zProgress.percentagecCs:|dkr|jdks|j|jkr$d}nt dt |¡¡}|S)Nrz??:??:??z%H:%M:%S)rßrÞr©råÚstrftimeÚgmtime)rÈÚdurationr(r-r-r.Úformat_duration0szProgress.format_durationcCs‚|jrd}|j}n^d}|jdkr&d}nJ|jdks<|j|jkrBd}n.t|j|jƒ}||j|j}|d|j}d|| |¡fS)NÚDonezETA rÒrrz%s: %s)rârárßrÞr©Úfloatrò)rÈrrr^r-r-r.ÚETA9s
zProgress.ETAcCsN|jdkrd}n|j|j|j}xtD]}|dkr6P|d}q(Wd||fS)Nrgièg@@z%d %sB/s)rárÞr©ÚUNITS)rÈr(Úunitr-r-r.ÚspeedLs

zProgress.speedN)rrÝ)rÌrÐrÑrìrÉrèrêr`rër¹rírîròrõrør-r-r-r.rÛÿs

	rÛz\{([^}]*)\}z[^/\\,{]\*\*|\*\*[^/\\,}]z^[^{]*\}|\{[^}]*$cCs<t |¡rd}t||ƒ‚t |¡r4d}t||ƒ‚t|ƒS)zAExtended globbing function that supports ** and {opt1,opt2,opt3}.z7invalid glob %r: recursive glob "**" must be used alonez2invalid glob %r: mismatching set marker '{' or '}')Ú_CHECK_RECURSIVE_GLOBr>rÓÚ_CHECK_MISMATCH_SETÚ_iglob)Ú	path_globrór-r-r.ras

rccst |d¡}t|ƒdkrpt|ƒdks,t|ƒ‚|\}}}xâ| d¡D](}x"td |||f¡ƒD]
}|Vq\WqBWnªd|kr’x t|ƒD]
}|Vq‚Wnˆ| dd¡\}}|dkr®d}|dkr¼d}n| d¡}| d	¡}xHt 	|¡D]:\}}}	tj
 |¡}x"ttj
 ||¡ƒD]}
|
VqWqÜWdS)
NrrrBrz**r/rlrbú\)Ú	RICH_GLOBr‹rgrfrûr$Ú	std_iglobr%rcrÏrdr)rüÚrich_path_globrrr´rpÚitemrdÚradicalÚdirr	r„r-r-r.rûls*


rû)ÚHTTPSHandlerÚmatch_hostnameÚCertificateErrorc@seZdZdZdZdd„ZdS)ÚHTTPSConnectionNTcCs\t |j|jf|j¡}t|ddƒr0||_| ¡tt	dƒsp|j
rHt	j}nt	j}t	j
||j|j|t	j|j
d|_n‚t	 t	j¡}tt	dƒr–|jt	jO_|jr¬| |j|j¡i}|j
rât	j|_|j|j
dtt	ddƒrâ|j|d<|j
|f|Ž|_|j
rX|jrXy$t|j ¡|jƒt d	|j¡Wn0tk
rV|j tj¡|j ¡‚YnXdS)
NÚ_tunnel_hostFÚ
SSLContext)Ú	cert_reqsÚssl_versionÚca_certsÚOP_NO_SSLv2)ÚcafileÚHAS_SNIÚserver_hostnamezHost verified: %s) rÀÚcreate_connectionÚhostÚportÚtimeoutr~ÚsockÚ_tunnelr|ÚsslrÚ
CERT_REQUIREDÚ	CERT_NONEÚwrap_socketÚkey_fileÚ	cert_fileÚPROTOCOL_SSLv23r	Úoptionsr
Úload_cert_chainÚverify_modeÚload_verify_locationsÚcheck_domainrÚgetpeercertrërrÚshutdownÚ	SHUT_RDWRr¤)rÈrr
Úcontextr‘r-r-r.Úconnect•s@



zHTTPSConnection.connect)rÌrÐrÑrr"r'r-r-r-r.rsrc@s&eZdZd	dd„Zdd„Zdd„ZdS)
rTcCst |¡||_||_dS)N)ÚBaseHTTPSHandlerrÉrr")rÈrr"r-r-r.rɼs
zHTTPSHandler.__init__cOs$t||Ž}|jr |j|_|j|_|S)a
            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.
            )rrr")rÈrr‘r(r-r-r.Ú_conn_makerÁs


zHTTPSHandler._conn_makerc
CsVy| |j|¡Stk
rP}z$dt|jƒkr>td|jƒ‚n‚Wdd}~XYnXdS)Nzcertificate verify failedz*Unable to verify server certificate for %s)Údo_openr)rÚstrÚreasonrr)rÈrYrxr-r-r.Ú
https_openÑszHTTPSHandler.https_openN)T)rÌrÐrÑrÉr)r-r-r-r-r.r»s
rc@seZdZdd„ZdS)ÚHTTPSOnlyHandlercCstd|ƒ‚dS)NzAUnexpected HTTP request on what should be a secure connection: %s)r)rÈrYr-r-r.Ú	http_openåszHTTPSOnlyHandler.http_openN)rÌrÐrÑr/r-r-r-r.r.äsr.é)r0éc@seZdZddd„ZdS)ÚHTTPrNcKs&|dkrd}| |j||f|Ž¡dS)Nr)Ú_setupÚ_connection_class)rÈrrr‘r-r-r.rÉñsz
HTTP.__init__)rN)rÌrÐrÑrÉr-r-r-r.r2ðsr2c@seZdZddd„ZdS)ÚHTTPSrNcKs&|dkrd}| |j||f|Ž¡dS)Nr)r3r4)rÈrrr‘r-r-r.rÉùszHTTPS.__init__)rN)rÌrÐrÑrÉr-r-r-r.r5øsr5c@seZdZddd„Zdd„ZdS)Ú	TransportrcCs||_tj ||¡dS)N)rrr6rÉ)rÈrÚuse_datetimer-r-r.rÉszTransport.__init__cCs`| |¡\}}}tdkr(t||jd}n4|jr<||jdkrR||_|t |¡f|_|jd}|S)N)r0r1)rrr)Ú
get_host_infoÚ	_ver_infor2rÚ_connectionÚ_extra_headersrÚHTTPConnection)rÈrÚhÚehÚx509r(r-r-r.Úmake_connections
zTransport.make_connectionN)r)rÌrÐrÑrÉr@r-r-r-r.r6ÿs
r6c@seZdZddd„Zdd„ZdS)Ú
SafeTransportrcCs||_tj ||¡dS)N)rrrArÉ)rÈrr7r-r-r.rÉszSafeTransport.__init__cCsx| |¡\}}}|si}|j|d<tdkr:t|df|Ž}n:|jrN||jdkrj||_|tj|df|Žf|_|jd}|S)Nr)r0r1rr)r8rr9r5r:r;rr)rÈrr=r>r‘r(r-r-r.r@s


zSafeTransport.make_connectionN)r)rÌrÐrÑrÉr@r-r-r-r.rAs
rAc@seZdZdd„ZdS)ÚServerProxycKst| dd¡|_}|dk	r^t|ƒd}| dd¡}|dkr@t}nt}|||d|d<}||_tjj	||f|ŽdS)Nrrr7Úhttps)r7Ú	transport)
rjrrrrrAr6rDrrBrÉ)rÈr\r‘rrWr7Útclsr^r-r-r.rÉ&szServerProxy.__init__N)rÌrÐrÑrÉr-r-r-r.rB%srBcKs6tjddkr|d7}nd|d<d|d<t||f|ŽS)NrrÚbrÚnewlinezutf-8r÷)r}r˜rù)r„r
r‘r-r-r.Ú	_csv_open;s

rHc@s4eZdZedƒedƒedƒdœZdd„Zdd„Zd	S)
ÚCSVBaserBú"r·)Ú	delimiterÚ	quotecharÚlineterminatorcCs|S)Nr-)rÈr-r-r.Ú	__enter__MszCSVBase.__enter__cGs|j ¡dS)N)r–r¤)rÈrFr-r-r.Ú__exit__PszCSVBase.__exit__N)rÌrÐrÑr+ÚdefaultsrNrOr-r-r-r.rIFs
rIc@s(eZdZdd„Zdd„Zdd„ZeZdS)Ú	CSVReadercKs\d|kr4|d}tjddkr,t d¡|ƒ}||_nt|ddƒ|_tj|jf|jŽ|_dS)Nr–rrzutf-8rdro)	r}r˜r™ršr–rHÚcsvrwrP)rÈr‘r–r-r-r.rÉUszCSVReader.__init__cCs|S)Nr-)rÈr-r-r.Ú__iter__`szCSVReader.__iter__cCsJt|jƒ}tjddkrFx,t|ƒD] \}}t|tƒs"| d¡||<q"W|S)Nrrzutf-8)Únextrwr}r˜rZrrrº)rÈr(r]rr-r-r.rTcs

zCSVReader.nextN)rÌrÐrÑrÉrSrTÚ__next__r-r-r-r.rQTsrQc@seZdZdd„Zdd„ZdS)Ú	CSVWritercKs$t|dƒ|_tj|jf|jŽ|_dS)Nrö)rHr–rRÚwriterrP)rÈr„r‘r-r-r.rÉnszCSVWriter.__init__cCsRtjddkrBg}x*|D]"}t|tƒr0| d¡}| |¡qW|}|j |¡dS)Nrrzutf-8)r}r˜rrrr"rWÚwriterow)rÈÚrowrorr-r-r.rXrs


zCSVWriter.writerowN)rÌrÐrÑrÉrXr-r-r-r.rVmsrVcsHeZdZeejƒZded<d‡fdd„	Zdd„Zdd	„Zd
d„Z	‡Z
S)
ÚConfiguratorÚinc_convertÚincNcs"tt|ƒ |¡|pt ¡|_dS)N)ÚsuperrZrÉrcr¼ro)rÈÚconfigro)Ú	__class__r-r.rɅszConfigurator.__init__c
s°‡‡fdd„‰ˆ d¡}t|ƒs*ˆ |¡}ˆ dd¡}ˆ dd¡}|r\t‡fdd„|Dƒƒ}‡‡fd	d„ˆDƒ}t|ƒ}|||Ž}|r¬x$| ¡D]\}}	t||ˆ|	ƒƒqW|S)
Ncszt|ttfƒr*t|ƒ‡fdd„|Dƒƒ}nLt|tƒrld|krHˆ |¡}qvi}x(|D]}ˆ||ƒ||<qRWn
ˆ |¡}|S)Ncsg|]}ˆ|ƒ‘qSr-r-)rKr])Úconvertr-r.rMŒszBConfigurator.configure_custom.<locals>.convert.<locals>.<listcomp>z())rr&rªÚtypeÚdictÚconfigure_customr`)Úor(r¬)r`rÈr-r.r`Šs


z.Configurator.configure_custom.<locals>.convertz()r/z[]r-csg|]}ˆ|ƒ‘qSr-r-)rKrd)r`r-r.rMŸsz1Configurator.configure_custom.<locals>.<listcomp>cs$g|]}t|ƒr|ˆˆ|ƒf‘qSr-)r)rKr¬)r^r`r-r.rM s)rjr;r5rªrbržÚsetattr)
rÈr^r‰Úpropsrržr‘r(rgrHr-)r^r`rÈr.rc‰s


zConfigurator.configure_customcCs4|j|}t|tƒr0d|kr0| |¡|j|<}|S)Nz())r^rrbrc)rÈrŽr(r-r-r.Ú__getitem__¨s
zConfigurator.__getitem__c	CsFtj |¡stj |j|¡}tj|ddd}t |¡}WdQRX|S)z*Default converter for the inc:// protocol.rozutf-8)r÷N)	rcrdÚisabsr$ror™rùrœr)rÈr®rþr(r-r-r.r[®s
zConfigurator.inc_convert)N)rÌrÐrÑrbrÚvalue_convertersrÉrcrgr[Ú
__classcell__r-r-)r_r.rZ€s
rZc@s*eZdZdZd
dd„Zdd„Zdd	„ZdS)ÚSubprocessMixinzC
    Mixin for running subprocesses and capturing their output
    FNcCs||_||_dS)N)ÚverboseÚprogress)rÈrlrmr-r-r.rÉ»szSubprocessMixin.__init__cCsn|j}|j}xT| ¡}|sP|dk	r0|||ƒq|sBtj d¡ntj | d¡¡tj ¡qW| ¡dS)z¨
        Read lines from a subprocess' output stream and either pass to a progress
        callable (if specified) or write progress information to sys.stderr.
        Nr/zutf-8)	rmrlÚreadliner}ÚstderrrµrºÚflushr¤)rÈr–r&rmrlr,r-r-r.rw¿szSubprocessMixin.readercKsžtj|ftjtjdœ|—Ž}tj|j|jdfd}| ¡tj|j|jdfd}| ¡| 	¡| 
¡| 
¡|jdk	rˆ| dd¡n|jršt
j d¡|S)N)Ústdoutrorq)rçrrozdone.Úmainzdone.
)Ú
subprocessÚPopenÚPIPEÚ	threadingÚThreadrwrqr`roÚwaitr$rmrlr}rµ)rÈÚcmdr‘rˆÚt1Út2r-r-r.Úrun_commandÔs
zSubprocessMixin.run_command)FN)rÌrÐrÑr†rÉrwr|r-r-r-r.rk·s
rkcCst dd|¡ ¡S)z,Normalize a python package name a la PEP 503z[-_.]+r^)raÚsubrƒ)rNr-r-r.Únormalize_nameåsr~c@s.eZdZdZdZd
dd„Zdd„Zdd	„ZdS)Ú
PyPIRCFilezhttps://upload.pypi.org/legacy/ÚpypiNcCs.|dkrtj tj d¡d¡}||_||_dS)NrEz.pypirc)rcrdr$rIrdrQ)rÈr„rQr-r-r.rÉùszPyPIRCFile.__init__c
Csˆi}tj |j¡r„|jp|j}t ¡}| |j¡| 	¡}d|kr2| 
dd¡}dd„| d¡Dƒ}|gkr~d|kr|dg}n²x°|D]¨}d|i}| 
|d¡|d<xHd	|jfd
|jfdfD].\}}	| 
||¡rÞ| 
||¡||<q¸|	||<q¸W|dkr||jdfkr|j|d	<q„|d|kr„|d	|kr„i}q„WnRd|kr„d}| 
|d	¡r\| 
|d	¡}n|j}| 
|d¡| 
|d
¡|||jdœ}|S)NÚ	distutilsz
index-serverscSs g|]}| ¡dkr| ¡‘qS)r)rS)rKÚserverr-r-r.rMsz#PyPIRCFile.read.<locals>.<listcomp>r·r€r‚rTÚ
repositoryÚrealm)rUNzserver-loginrU)rTrUrƒr‚r„)rcrdrârdrQÚDEFAULT_REPOSITORYrÚRawConfigParserr›r§rrr‹Ú
DEFAULT_REALMÚ
has_option)
rÈr(rƒr^r§Ú
index_serversÚ_serversr‚rŽr‡r-r-r.r›ÿsN








zPyPIRCFile.readc	Cslt ¡}|j}| |¡| d¡s,| d¡| dd|¡| dd|¡t|dƒ}| |¡WdQRXdS)Nr€rTrUrö)	rr†rdr›Úhas_sectionr±r´rùrµ)rÈrTrUr^r„rþr-r-r.rè9s


zPyPIRCFile.update)NN)rÌrÐrÑr…r‡rÉr›rèr-r-r-r.rôs

:rcCst|jd ¡S)zG
    Read the PyPI access configuration as supported by distutils.
    )rQ)rrQr›)r°r-r-r.Ú_load_pypircEsrŒcCstƒ |j|j¡dS)N)rrèrTrU)r°r-r-r.Ú
_store_pypircKsrcCsÖtjdkrFdtj ¡krdSdtj ¡kr.dSdtj ¡kr@dStjSdtjkrZtjdStjd	ksnttd
ƒsttjSt ¡\}}}}}| ¡ 	dd¡}| 	d
d¡ 	dd¡}|dd…dkrÆd||fS|dd…dkr(|ddkrÈd}dt
|dƒd|dd…f}dddœ}|d|tj7}n |dd…dkrLdd lm
}|ƒS|dd!…d"krŠd"}t d#tj¡}| |¡}|rÈ| ¡}n>|dd!…d$krÈddl}	ddl}
|	 |
j ¡|||¡\}}}d%|||fS)&aúReturn a string that identifies the current platform.  This is used mainly to
    distinguish platform-specific build directories and platform-specific built
    distributions.  Typically includes the OS name and version and the
    architecture (as supplied by 'os.uname()'), although the exact information
    included depends on the OS; eg. on Linux, the kernel version isn't
    particularly important.

    Examples of returned values:
       linux-i586
       linux-alpha (?)
       solaris-2.6-sun4u

    Windows will return one of:
       win-amd64 (64bit Windows on AMD64 (aka x86_64, Intel64, EM64T, etc)
       win32 (all others - specifically, sys.platform is returned)

    For other non-POSIX platforms, currently just returns 'sys.platform'.

    rCÚamd64z	win-amd64z(arm)z	win-arm32z(arm64)z	win-arm64Ú_PYTHON_HOST_PLATFORMrÚunamerbrr]r_r^NéÚlinuxz%s-%sÚsunosrÚ5Úsolarisz%d.%srr0Ú32bitÚ64bit)iÿÿÿlÿÿÿÿz.%sÚaix)Úaix_platformr1Úcygwinz[\d.]+Údarwinz%s-%s-%s)rcrNr}r}rƒÚplatformrGr|rr!ÚintÚmaxsizeÚ_aix_supportr™rarÚASCIIrrªÚ_osx_supportÚdistutils.sysconfigÚget_platform_osxÚ	sysconfigÚget_config_vars)ÚosnamerÚreleaser}ÚmachineÚbitnessr™Úrel_rer'r¡rr-r-r.Úget_host_platformSsL


 


r«Úwin32z	win-amd64z	win-arm32)Úx86Úx64ÚarmcCs2tjdkrtƒStj d¡}|tkr*tƒSt|S)NrCÚVSCMD_ARG_TGT_ARCH)rcrNr«rGrrÚ_TARGET_TO_PLAT)Úcross_compilation_targetr-r-r.Úget_platform«s
r³)NN)r¿)N)N)NT)Šr™ÚcollectionsrÚ
contextlibrRÚglobrrÿrÍrœÚloggingrcrrarÀrÚImportErrorrsr}rÃr·r¥rvZdummy_threadingrårrÚcompatrrrr	r
rrr
rrrrrrrrrrrrrÚ	getLoggerrÌrërrrErDr5r<r9rVr#r>raryrr‚rŠrr¯r¶Úcontextmanagerr»r½rÅrÊrÆrØrÙr5r6ÚVERBOSEr=rŸrNrPrRrVrYr\ÚIrcr_rhrjrkrqryr{r|r~rr‡r“ÚARCHIVE_EXTENSIONSrÌrÕrörÛrþrùrúrûrr(rrrr.r˜r9r2r5r6rArBrHrIrQrVrZrkr~rrŒrr«r±r³r-r-r-r.Ú<module>sì
\








Y}

	/
	8

)



,H
6]


+)	
7.QR