Viewing File: /opt/alt/python35/lib/python3.5/site-packages/pip/_vendor/distlib/__pycache__/wheel.cpython-35.pyc



t_@sddlmZddlZddlZddlZddlZddlmZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlmZmZddlmZmZmZmZmZddlmZddlm Z m!Z!m"Z"m#Z#dd	l$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-dd
l.m/Z/m0Z0ej1e2Z3da4e5edrdZ6n9ej7j8d
rdZ6nej7dkrdZ6ndZ6ej9dZ:e:r-dej;ddZ:de:Z<e6e:Z=ej$j>j?ddj?ddZ@ej9dZAeAoeAj8dreAj?ddZAnddZBeBZA[BejCdejDejEBZFejCdejDejEBZGejCdZHejCd ZId!ZJd"ZKe
jLd#kr9d$d%ZMnd&d%ZMGd'd(d(eNZOeOZPGd)d*d*eNZQd+d,ZReRZS[Rdd-d.ZTdS)/)unicode_literalsN)message_from_file)__version__DistlibException)	sysconfigZipFilefsdecode	text_typefilter)InstalledDistribution)MetadataMETADATA_FILENAMEWHEEL_METADATA_FILENAMELEGACY_METADATA_FILENAME)	FileOperatorconvert_path	CSVReader	CSVWriterCachecached_propertyget_cache_baseread_exportstempdir)NormalizedVersionUnsupportedVersionErrorpypy_version_infoppjavajycliipcppy_version_nodotz%s%spy-_.SOABIzcpython-cCssdtg}tjdr(|jdtjdrD|jdtjddkrf|jdd	j|S)
Nr"Py_DEBUGd
WITH_PYMALLOCmPy_UNICODE_SIZEu)
VER_SUFFIXrget_config_varappendjoin)partsr7/builddir/build/BUILDROOT/alt-python35-pip-20.2.4-1.el7.x86_64/opt/alt/python35/lib/python3.5/site-packages/pip/_vendor/distlib/wheel.py_derive_abi<s


r9zz
(?P<nm>[^-]+)
-(?P<vn>\d+[^-]*)
(-(?P<bn>\d+[^-]*))?
-(?P<py>\w+\d+(\.\w+\d+)*)
-(?P<bi>\w+)
-(?P<ar>\w+(\.\w+)*)
\.whl$
z7
(?P<nm>[^-]+)
-(?P<vn>\d+[^-]*)
(-(?P<bn>\d+[^-]*))?$
s
\s*#![^\r\n]*s^(\s*#!("[^"]+"|\S+))\s+(.*)$s#!pythons	#!pythonw/cCs|S)Nr7)or7r7r8<lambda>^sr<cCs|jtjdS)Nr:)replaceossep)r;r7r7r8r<`sc@sOeZdZddZddZddZddd	Zd
dZdS)MountercCsi|_i|_dS)N)
impure_wheelslibs)selfr7r7r8__init__ds	zMounter.__init__cCs!||j|<|jj|dS)N)rArBupdate)rCpathname
extensionsr7r7r8addhs
zMounter.addcCsF|jj|}x-|D]%\}}||jkr|j|=qWdS)N)rApoprB)rCrFrGkvr7r7r8removelszMounter.removeNcCs"||jkr|}nd}|S)N)rB)rCfullnamepathresultr7r7r8find_modulers	zMounter.find_modulecCs|tjkrtj|}nr||jkr>td|tj||j|}||_|jdd}t|dkr|d|_	|S)Nzunable to find extension for %sr(rr)
sysmodulesrBImportErrorimpZload_dynamic
__loader__rsplitlen__package__)rCrMrOr6r7r7r8load_moduleys	
zMounter.load_module)__name__
__module____qualname__rDrHrLrPrYr7r7r7r8r@cs
r@c@sleZdZdZd4ZdZdddddZedd	Zed
dZ	edd
Z
eddZddZ
eddZddZdddZddZddZddZddddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zdd,d-Zd.d/Zd0d1Zdd2d3ZdS)5Wheelz@
    Class to build and install from Wheel files (PEP 427).
    rsha256NFcCs||_||_d|_tg|_dg|_dg|_tj|_	|dkr{d|_
d|_|j|_
n?tj|}|r|jd}|d|_
|djd	d
|_|d|_|j|_
ntjj|\}}tj|}|std||r9tjj||_	||_
|jd}|d|_
|d|_|d|_|d
jd|_|djd|_|djd|_dS)zB
        Initialise an instance using a (valid) filename.
        r1noneanyNdummyz0.1nmZvnr'r&ZbnzInvalid name or filename: %rr%r(Zbiar)signZ
should_verifybuildverPYVERpyverabiarchr>getcwddirnamenameversionfilename	_filenameNAME_VERSION_REmatch	groupdictr=rNsplitFILENAME_RErabspath)rCrnrdverifyr-inforkr7r7r8rDsB					


	


zWheel.__init__cCs|jrd|j}nd}dj|j}dj|j}dj|j}|jjdd}d|j|||||fS)zJ
        Build and return a filename from the various components.
        r&r1r(r'z%s-%s%s-%s-%s-%s.whl)rer5rgrhrirmr=rl)rCrergrhrirmr7r7r8rns	zWheel.filenamecCs+tjj|j|j}tjj|S)N)r>rNr5rkrnisfile)rCrNr7r7r8existsszWheel.existsccsNxG|jD]<}x3|jD](}x|jD]}|||fVq*WqWq
WdS)N)rgrhri)rCrgrhrir7r7r8tagssz
Wheel.tagscCsMtjj|j|j}d|j|jf}d|}tjd}t	|d}|j
|}|djdd}tdd	|D}t
tg}	d}
xt|	D]l}yQtj||}|j|)}
||
}td
|}
|
rPWdQRXWqtk
rYqXqW|
sBtddj|	WdQRX|
S)
Nz%s-%sz%s.dist-infozutf-8rz
Wheel-Versionr(rcSsg|]}t|qSr7)int).0ir7r7r8
<listcomp>s	z"Wheel.metadata.<locals>.<listcomp>fileobjz8Invalid wheel, because metadata is missing: looked in %sz, )r>rNr5rkrnrlrmcodecs	getreaderrget_wheel_metadatarstuplerr	posixpathopenr
KeyError
ValueError)rCrFname_verinfo_dirwrapperzfwheel_metadatawvfile_versionfnsrOfnmetadata_filenamebfwfr7r7r8metadatas0


	zWheel.metadatac	Csvd|j|jf}d|}tj|d}|j|(}tjd|}t|}WdQRXt|S)Nz%s-%sz%s.dist-infoWHEELzutf-8)	rlrmrr5rrrrdict)rCrrrrrrmessager7r7r8rs
zWheel.get_wheel_metadatac	CsGtjj|j|j}t|d}|j|}WdQRX|S)Nr{)r>rNr5rkrnrr)rCrFrrOr7r7r8rwsz
Wheel.infocCs&tj|}|r|j}|d|||d}}d|jkr]t}nt}tj|}|rd|jd
}nd}||}||}nv|jd}|jd}	|dks||	krd}
n)|||dd	krd	}
nd}
t|
|}|S)Nspythonw rs
s
rr$s
)	
SHEBANG_RErqendlowerSHEBANG_PYTHONWSHEBANG_PYTHONSHEBANG_DETAIL_REgroupsfind)rCdatar-rshebangZdata_after_shebangZshebang_pythonargsZcrlfZtermr7r7r8process_shebangs,!	

		zWheel.process_shebangcCs|dkr|j}ytt|}Wn"tk
rLtd|YnX||j}tj|jdj	d}||fS)NzUnsupported hash algorithm: %r=ascii)
	hash_kindgetattrhashlibAttributeErrorrdigestbase64urlsafe_b64encoderstripdecode)rCrrhasherrOr7r7r8get_hash%s	
!zWheel.get_hashc
Csut|}ttjj||}|j|ddft|%}x|D]}|j|qSWWdQRXdS)Nr1)listto_posixr>rNrelpathr4rwriterow)rCrecordsrecord_pathbasepwriterrowr7r7r8write_record0s
zWheel.write_recordcCsg}|\}}tt|j}xt|D]l\}}	t|	d}
|
j}WdQRXd|j|}tjj|	}
|j	|||
fq+Wtjj
|d}	|j||	|ttjj
|d}|j	||	fdS)Nrbz%s=%sRECORD)
rrrrreadrr>rNgetsizer4r5rr)rCrwlibdir
archive_pathsrdistinforraprfrrsizer7r7r8
write_records8szWheel.write_recordscCs]t|dtjA}x7|D]/\}}tjd|||j||qWWdQRXdS)NwzWrote %s to %s in wheel)rzipfileZIP_DEFLATEDloggerdebugwrite)rCrFrrrrr7r7r8	build_zipHszWheel.build_zipc"s|dkri}ttfddd(d}|dkrgd}tg}tg}tg}n!d}tg}d	g}d
g}|jd||_|jd||_|jd
||_	|}	d|j
|jf}
d|
}d|
}g}
xDd)D]<}|krq|}tj
j|rxtj|D]\}}}x|D]}ttj
j||}tj
j||}ttj
j|||}|
j||f|dkr_|jdr_t|d}|j}WdQRX|j|}t|d}|j|WdQRXq_WqIWqW|	}d}xtj|D]\}}}||krxRt|D]D\}}t|}|jdrtj
j||}||=PqW|stdxi|D]a}t|jd*rqtj
j||}ttj
j||}|
j||fqWqdWtj|}xc|D][}|d+krlttj
j||}ttj
j||}|
j||fqlWd|p|jd td!|g}x4|jD])\}}}|jd"|||fqWtj
j|d}t|d#}|jd$j|WdQRXttj
j|d}|
j||fd%d&} t |
d'| }
|j!||f|	|
tj
j|j"|j#}!|j$|!|
|!S),z
        Build a wheel from files in specified paths, and use any specified tags
        when determining the name of the wheel.
        Ncs
|kS)Nr7)r;)pathsr7r8r<VszWheel.build.<locals>.<lambda>purelibplatlibrfalsetruer_r`rgrhriz%s-%sz%s.dataz%s.dist-inforheadersscriptsz.exerwbz
.dist-infoz(.dist-info directory expected, not found.pyc.pyor	INSTALLERSHAREDrzWheel-Version: %d.%dzGenerator: distlib %szRoot-Is-Purelib: %sz
Tag: %s-%s-%sr
cSs9|d}|jd}d|kr/|d7}||fS)Nrr:z
.dist-infoi')count)trnr7r7r8sorters


zWheel.build.<locals>.sorterkey)rr)rrr)rr)rrrr)%rrIMPVERABIARCHrfgetrgrhrirlrmr>rNisdirwalkr	r5rrr4endswithrrrr	enumerateAssertionErrorlistdir
wheel_versionrrzsortedrrkrnr)"rCrrzrZlibkeyis_pureZ
default_pyverZdefault_abiZdefault_archrrdata_dirrrrrNrootdirsfilesrrrprrrrr~dnrrgrhrirrFr7)rr8buildNs%					





 


zWheel.buildcCs
|jdS)zl
        Determine whether an archive entry should be skipped when verifying
        or installing.
        r:/RECORD.jws)r:r)r)rCarcnamer7r7r8
skip_entryszWheel.skip_entrycCIKs	|j}|jd}|jdd}|jdd}tjj|j|j}d|j|jf}	d|	}
d|	}t	j|t
}t	j|d}
t	j|d	}tjd
}t
|d}|j|
}||}t|}WdQRX|d
jdd}tdd|D}||jkr]|r]||j||ddkrz|d}n
|d}i}|j|E}td|,}x"|D]}|d}|||<qWWdQRXWdQRXt	j|
d}t	j|d}t	j|
dd}td|}d|_tj} g}!tj}"|"|_d|_zyx|jD]y}#|#j}$t|$tr|$}%n|$jd
}%|j |%rqs||%}|drt!|#j"|dkrt#d|%|drw|djdd\}&}'|j|$}|j$}(WdQRX|j%|(|&\})}*|*|'krwt#d|$|r|%j&||frt'j(d |%qs|%j&|o|%j)d!}+|%j&|r|%jd"d\})},}-tjj||,t*|-}.n0|%|
|fkr%qstjj|t*|%}.|+sL|j|$}|j+||.WdQRX|!j,|.|r|drt|.d#G}|j$}(|j%|(|&\})}/|/|*krt#d$|.WdQRX| r|.j)d%ry&|j-|.d&|}0|!j,|0Wqt.k
rHt'j/d'd(dYqXqstjj0t*|$}1tjj|"|1}2|j|$}|j+||2WdQRXtjj|.\}3}1|3|_|j1|1}4|j2|4|!j3|4qsW|rt'j(d)d}5n.d}6|j4d
}|d*kr+t	j|d+}7y|j|7}t5|}8WdQRXi}6xd>D]}9d.|9}:|:|8krri|6d/|9<};x^|8|:j6D]L}<d0|<j7|<j8f}=|<j9r|=d1d2j|<j97}=|=|;|<j<qWqrWWqt.k
r't'j/d3YqXnxyV|j|@}||}t:j;|jd4}6|6ry|6jd5}6WdQRXWnt.k
rt'j/d6YnX|6r|6jd7i}>|6jd8i}?|>s|?r|jdd}@tjj<|@s	t=d9|@|_xF|>j>D]8\}:}<d:|:|<f}A|j1|A}4|j2|4qW|?rd-di}BxI|?j>D];\}:}<d:|:|<f}A|j1|A|B}4|j2|4qzWtjj||}t?|}5t@|}|d=|d=||d;<|5jA||}|r#	|!j,||5jB|!|d<||5SWn,t.k
rm	t'jCd=|jDYnXWdtEjF|"XWdQRXdS)?a~
        Install a wheel to the specified paths. If kwarg ``warner`` is
        specified, it should be a callable, which will be called with two
        tuples indicating the wheel version of this software and the wheel
        version in the file, if there is a discrepancy in the versions.
        This can be used to issue any warnings to raise any exceptions.
        If kwarg ``lib_only`` is True, only the purelib/platlib files are
        installed, and the headers, scripts, data and dist-info metadata are
        not written. If kwarg ``bytecode_hashed_invalidation`` is True, written
        bytecode will try to use file-hash based invalidation (PEP-552) on
        supported interpreter versions (CPython 2.7+).

        The return value is a :class:`InstalledDistribution` instance unless
        ``options.lib_only`` is True, in which case the return value is ``None``.
        warnerlib_onlyFZbytecode_hashed_invalidationz%s-%sz%s.dataz%s.dist-inforrzutf-8r{Nz
Wheel-Versionr(rcSsg|]}t|qSr7)r|)r}r~r7r7r8rs	z!Wheel.install.<locals>.<listcomp>zRoot-Is-Purelibrrrstreamrr1rdry_runTr$zsize mismatch for %s=zdigest mismatch for %szlib_only: skipping %sz.exer:rzdigest mismatch on write for %sz.pyhashed_invalidationzByte-compilation failedexc_infozlib_only: returning Nonez1.0zentry_points.txtconsoleguiz
%s_scriptszwrap_%sz%s:%sz [%s],zAUnable to read legacy script metadata, so cannot generate scriptsrGzpython.commandsz8Unable to read JSON metadata, so cannot generate scriptsZwrap_consoleZwrap_guizValid script path not specifiedz%s = %slibprefixzinstallation failed.)rr)Grrr>rNr5rkrnrlrmrrrrrrrrsrrrrrecordrQdont_write_bytecodetempfilemkdtemp
source_dir
target_dirinfolist
isinstancer
rrstr	file_sizerrr
startswithrrrrcopy_streamr4byte_compile	Exceptionwarningbasenamemakeset_executable_modeextendrwrvaluesrsuffixflagsjsonloadrritemsrrZwrite_shared_locationsZwrite_installed_files	exceptionrollbackshutilrmtree)CrCrmakerkwargsrrrZbc_hashed_invalidationrFrrr
metadata_namewheel_metadata_namerecord_namerrbwfrrrrrrrreaderrrZdata_pfxZinfo_pfxZ
script_pfxfileopZbcoutfilesworkdirzinfor	u_arcnamekindvaluerr'rZ	is_scriptwhereroutfileZ	newdigestZpycrZworknamer	filenamesdistcommandsepZepdatarrJr+rKsconsole_scriptsgui_scriptsZ
script_dirscriptoptionsr7r7r8installsF	





	
				
#


"
	
	

	


	

	




z
Wheel.installcCsNtdkrJtjjttddtjdd}t|atS)Nzdylib-cachez%s.%sr$)	cacher>rNr5rrrQversion_infor)rCrr7r7r8_get_dylib_caches
zWheel._get_dylib_cachecCstjj|j|j}d|j|jf}d|}tj|d}tj	d}g}t
|ds}yW|j|A}||}	tj
|	}
|j}|j|}tjj|j|}
tjj|
stj|
x|
jD]\}}tjj|
t|}tjj|sEd}nQtj|j}tjj|}|j|}tj|j}||k}|r|j||
|j||fqWWdQRXWntk
rYnXWdQRX|S)Nz%s-%sz%s.dist-infoZ
EXTENSIONSzutf-8r{T)r>rNr5rkrnrlrmrrrrrrrrA
prefix_to_dirrrmakedirsr rrystatst_mtimedatetime
fromtimestampgetinfo	date_timeextractr4r)rCrFrrrrrOrrrrGr?rZ
cache_baserlrdestrJZ	file_timerwZ
wheel_timer7r7r8_get_extensionss>

	"
zWheel._get_extensionscCs
t|S)zM
        Determine if a wheel is compatible with the running system.
        )
is_compatible)rCr7r7r8rMszWheel.is_compatiblecCsdS)zP
        Determine if a wheel is asserted as mountable by its metadata.
        Tr7)rCr7r7r8is_mountableszWheel.is_mountablecCstjjtjj|j|j}|jsId|}t||jskd|}t||t	jkrt
jd|nm|rt	jj|nt	jj
d||j}|rtt	jkrt	jjttj||dS)Nz)Wheel %s not compatible with this Python.z$Wheel %s is marked as not mountable.z%s already in pathr)r>rNrur5rkrnrMrrNrQrrr4insertrL_hook	meta_pathrH)rCr4rFmsgrGr7r7r8mounts"'

zWheel.mountcCstjjtjj|j|j}|tjkrItjd|nTtjj	||t
jkrut
j	|t
jst
tjkrtjj	t
dS)Nz%s not in path)
r>rNrur5rkrnrQrrrLrPrArQ)rCrFr7r7r8unmounts'
	z
Wheel.unmountc'Cstjj|j|j}d|j|jf}d|}d|}tj|t}tj|d}tj|d}t	j
d}t|d}	|	j|}
||
}t
|}WdQRX|djd	d
}
tdd|
D}i}|	j|E}td
|,}x"|D]}|d}|||<q-WWdQRXWdQRXx=|	jD]/}|j}t|tr|}n|jd}|jd}d|krtd||j|rqf||}|drt|j|dkrtd||d
rf|d
jdd
\}}|	j|}|j}WdQRX|j||\}}||krftd|qfWWdQRXdS)Nz%s-%sz%s.dataz%s.dist-inforrzutf-8r{z
Wheel-Versionr(rcSsg|]}t|qSr7)r|)r}r~r7r7r8r!s	z Wheel.verify.<locals>.<listcomp>rrr:z..zinvalid entry in wheel: %rr$zsize mismatch for %srzdigest mismatch for %s)r>rNr5rkrnrlrmrrrrrrrrsrrrrr
rrrrrrr)rCrFrrrr'r(r)rrr*rrrrrrr+rrr/rr0r1r2rr'rr7r7r8rvsV



		

#

zWheel.verifycKsdd}dd}tjj|j|j}d|j|jf}d|}tj|d}	t}
t	|d}i}x|j
D]}
|
j}t|tr|}n|j
d	}||	krqd
|krtd||j|
|
tjj|
t|}|||<qWWdQRX|||\}}|||}|r|||\}}|r||kr||||dkrtjd
dddd|
\}}tj|n:tjj|std|tjj||j}t|j}tjj|
|}||f}|j||
||j|||dkrtj||WdQRX|S)a
        Update the contents of a wheel in a generic way. The modifier should
        be a callable which expects a dictionary argument: its keys are
        archive-entry paths, and its values are absolute filesystem paths
        where the contents the corresponding archive entries can be found. The
        modifier is free to change the contents of the files pointed to, add
        new entries and remove entries, before returning. This method will
        extract the entire contents of the wheel to a temporary location, call
        the modifier, and then use the passed (and possibly updated)
        dictionary to write a new wheel. If ``dest_dir`` is specified, the new
        wheel is written there -- otherwise, the original wheel is overwritten.

        The modifier should return True if it updated the wheel, else False.
        This method returns the same value the modifier returns.
        cSsbd}}d|tf}||kr0d|}||krX||}td|j}||fS)Nz%s/%sz%s/PKG-INFOrN)rr
rm)path_maprrmrNrr7r7r8get_versionYs


z!Wheel.update.<locals>.get_versionc
Ss%d}yt|}|jd}|dkr=d|}nhdd||ddjdD}|dd7<d|d|djd	d
|Df}Wn"tk
rtjd|YnX|r!td|}||_|j	t
}|jd|d
|tjd||dS)Nr&rz%s+1cSsg|]}t|qSr7)r|)r}r9r7r7r8rks	z8Wheel.update.<locals>.update_version.<locals>.<listcomp>rr(z%s+%scss|]}t|VqdS)N)r)r}r~r7r7r8	<genexpr>nsz7Wheel.update.<locals>.update_version.<locals>.<genexpr>z0Cannot update non-compliant (PEP-440) version %rrNlegacyzVersion updated from %r to %rr)rrrsr5rrrr
rmrrr)rmrNupdatedrKr~r6ZmdrXr7r7r8update_versioncs(
*$
		z$Wheel.update.<locals>.update_versionz%s-%sz%s.dist-inforr{zutf-8z..zinvalid entry in wheel: %rNrz.whlrz
wheel-update-dirzNot a directory: %r)r>rNr5rkrnrlrmrrrrrr
rrrJrr
mkstempcloserrr rrr#copyfile)rCmodifierdest_dirr&rVrZrFrrr)r.rrUr/rr0rNZoriginal_versionr'modifiedcurrent_versionfdnewpathrrrwr7r7r8rEHsX

		

zWheel.update)rr)rZr[r\__doc__rrrDpropertyrnryrzrrrrwrrrrrrrr>rArLrMrNrSrTrvrEr7r7r7r8r]s4) 	t	"8r]cCsbtg}td}xGttjddddD](}|jdj|t|gq1Wg}xItjD];\}}}|j	drp|j|j
dddqpW|jtdkr|j
dt|jdg}tg}tjdkrtjd	t}|r|j\}	}}}
t|}|
g}|
dkr^|jd|
dkrw|jd|
dkr|jd|
dkr|jd|
dkr|jdxZ|dkrx=|D]5}d|	|||f}
|
tkr|j|
qW|d8}qWxH|D]@}x7|D]/}
|jdjt|df||
fq3Wq&Wxtt|D]f\}}|jdjt|fddf|dkrw|jdjt|dfddfqwWxtt|D]f\}}|jdjd|fddf|dkr|jdjd|dfddfqWt|S)zG
    Return (pyver, abi, arch) tuples compatible with this Python.
    rrr1z.abir(r$r_darwinz(\w+)_(\d+)_(\d+)_(\w+)$i386ppcfatx86_64Zfat3ppc64fat64intel	universalz%s_%s_%s_%sr`r%rr)rhri)rhrirk)rlrk)rhrk)rhrkrnrirl)r2rangerQr@r4r5rrTget_suffixesrrssortrrOrplatformrerqrr|
IMP_PREFIXrset)versionsmajorminorabisrr'rOarchesr-rlrimatchesrqr9rhr~rmr7r7r8compatible_tagss`	
$&!

		







1%-%-r}cCst|tst|}d}|dkr3t}xK|D]C\}}}||jkr:||jkr:||jkr:d}Pq:W|S)NFT)rr]COMPATIBLE_TAGSrgrhri)wheelrzrOverrhrir7r7r8rMs-rM)U
__future__rrrrFdistutils.util	distutilsemailrrrTrloggingr>rrtr#rQr
rr1rrcompatrrr	r
rZdatabaserrr
rrrutilrrrrrrrrrrmrr	getLoggerrZrr?hasattrrursrr3r2r@rfrget_platformr=rrr9compile
IGNORECASEVERBOSErtrprrrrr?robjectr@rPr]r}r~rMr7r7r7r8<module>s("@			

'		#	'>	
Back to Directory File Manager