Viewing File: /usr/lib/python3.6/site-packages/pip/_vendor/distlib/__pycache__/metadata.cpython-36.pyc

3

aj@sdZddlmZddlZddlmZddlZddlZddlZddl	m
Z
mZddlm
Z
mZmZddlmZdd	lmZmZdd
lmZmZejeZGddde
ZGd
dde
ZGddde
ZGddde
ZdddgZdZ dZ!ej"dZ#ej"dZ$dGZ%dHZ&dIZ'dJZ(dKZ)dLZ*dMZ+e,Z-e-j.e%e-j.e&e-j.e(e-j.e*ej"d8Z/d9d:Z0d;d<Z1ddddd%ddd d!d"d#d+d,d$d&d'd-d/d0d5d1d2d*d)d(d.d3d4d6d7d=Z2dNZ3dOZ4dPZ5dQZ6dRZ7dSZ8dTZ9e:Z;ej"d>Z<dUd@dAZ=GdBdCdCe:Z>dDZ?dEZ@GdFdde:ZAdS)VzImplementation of the Metadata for Python packages PEPs.

Supports all metadata formats (1.0, 1.1, 1.2, and 2.0 experimental).
)unicode_literalsN)message_from_file)DistlibException__version__)StringIOstring_types	text_type)	interpret)extract_by_key
get_extras)
get_schemePEP440_VERSION_REc@seZdZdZdS)MetadataMissingErrorzA required metadata is missingN)__name__
__module____qualname____doc__rr/usr/lib/python3.6/metadata.pyrsrc@seZdZdZdS)MetadataConflictErrorz>Attempt to read or write metadata fields that are conflictual.N)rrrrrrrrr src@seZdZdZdS) MetadataUnrecognizedVersionErrorz Unknown metadata version number.N)rrrrrrrrr$src@seZdZdZdS)MetadataInvalidErrorzA metadata value is invalidN)rrrrrrrrr(srMetadataPKG_INFO_ENCODINGPKG_INFO_PREFERRED_VERSIONzutf-8z1.1z

       \|z	
        Metadata-VersionNameVersionPlatformSummaryDescriptionKeywords	Home-pageAuthorAuthor-emailLicenseSupported-Platform
ClassifierDownload-URL	ObsoletesProvidesRequires
MaintainerMaintainer-emailObsoletes-DistProject-URL
Provides-Dist
Requires-DistRequires-PythonRequires-ExternalPrivate-VersionObsoleted-BySetup-Requires-Dist	ExtensionProvides-Extraz"extra\s*==\s*("([^"]+)"|'([^']+)')cCs<|dkrtS|dkrtS|dkr$tS|dkr0tSt|dS)Nz1.0z1.1z1.2z2.0)_241_FIELDS_314_FIELDS_345_FIELDS_426_FIELDSr)versionrrr_version2fieldlistgsr?c	Csdd}g}x.|jD]"\}}|gddfkr.q|j|qWddddg}xt|D]l}|tkrld|krl|jd|tkrd|kr|jd|tkrd|kr|jd|tkrNd|krN|jdqNWt|d	kr|d
St|d
krtdd|ko||t	}d|ko
||t
}d|ko||t}t|t|t|d	krFtd|rl|rl|rlt
|krlt
S|rvdS|rdSdS)
z5Detect the best version depending on the fields used.cSsx|D]}||krdSqWdS)NTFr)keysmarkersmarkerrrr_has_markerus
z"_best_version.<locals>._has_markerUNKNOWNNz1.0z1.1z1.2z2.0rrzUnknown metadata setz(You used incompatible 1.1/1.2/2.0 fields)itemsappendr:remover;r<r=lenr_314_MARKERS_345_MARKERS_426_MARKERSintr)	fieldsrCr@keyvalueZpossible_versionsZis_1_1Zis_1_2Zis_2_0rrr
_best_versionssB




rP)metadata_versionnamer>platformZsupported_platformsummarydescriptionkeywords	home_pageauthorauthor_email
maintainermaintainer_emaillicense
classifierdownload_urlobsoletes_dist
provides_dist
requires_distsetup_requires_distrequires_pythonrequires_externalrequiresprovides	obsoletesproject_urlZprivate_versionZobsoleted_by	extensionZprovides_extraz[^A-Za-z0-9.]+FcCs0|r$tjd|}tjd|jdd}d||fS)zhReturn the distribution name with version.

    If for_filename is true, return a filename-escaped form.- .z%s-%s)	_FILESAFEsubreplace)rRr>Zfor_filenamerrr_get_name_and_versionsrpc@s
eZdZdZd?ddZddZdd	Zd
dZdd
ZddZ	ddZ
ddZddZddZ
ddZd@ddZddZdd Zd!d"Zd#d$ZdAd%d&ZdBd'd(ZdCd)d*Zd+d,Zefd-d.ZdDd/d0ZdEd1d2Zd3d4Zd5d6Zd7d8Zd9d:Zd;d<Z d=d>Z!dS)FLegacyMetadataaaThe legacy metadata of a release.

    Supports versions 1.0, 1.1 and 1.2 (auto-detected). You can
    instantiate the class with one of these arguments (or none):
    - *path*, the path to a metadata file
    - *fileobj* give a file-like object with metadata as content
    - *mapping* is a dict-like object
    - *scheme* is a version scheme name
    NdefaultcCsz|||gjddkrtdi|_g|_d|_||_|dk	rH|j|n.|dk	r\|j|n|dk	rv|j||j	dS)Nz'path, fileobj and mapping are exclusive)
count	TypeError_fieldsZrequires_filesZ
_dependenciesschemeread	read_fileupdateset_metadata_version)selfpathfileobjmappingrwrrr__init__s
zLegacyMetadata.__init__cCst|j|jd<dS)NzMetadata-Version)rPrv)r|rrrr{sz#LegacyMetadata.set_metadata_versioncCs|jd||fdS)Nz%s: %s
)write)r|r~rRrOrrr_write_fieldszLegacyMetadata._write_fieldcCs
|j|S)N)get)r|rRrrr__getitem__szLegacyMetadata.__getitem__cCs|j||S)N)set)r|rRrOrrr__setitem__szLegacyMetadata.__setitem__cCs8|j|}y|j|=Wntk
r2t|YnXdS)N)
_convert_namervKeyError)r|rR
field_namerrr__delitem__s

zLegacyMetadata.__delitem__cCs||jkp|j||jkS)N)rvr)r|rRrrr__contains__s
zLegacyMetadata.__contains__cCs(|tkr|S|jddj}tj||S)Nrj_)_ALL_FIELDSrolower_ATTR2FIELDr)r|rRrrrrszLegacyMetadata._convert_namecCs|tks|tkrgSdS)NrD)_LISTFIELDS_ELEMENTSFIELD)r|rRrrr_default_value%szLegacyMetadata._default_valuecCs&|jdkrtjd|Stjd|SdS)N1.01.1
)rr)rQ_LINE_PREFIX_PRE_1_2rn_LINE_PREFIX_1_2)r|rOrrr_remove_line_prefix*s
z"LegacyMetadata._remove_line_prefixcCs|tkr||St|dS)N)rAttributeError)r|rRrrr__getattr__0szLegacyMetadata.__getattr__FcCst|d|d|S)zhReturn the distribution name with version.

        If filesafe is true, return a filename-escaped form.rr)rp)r|Zfilesaferrrget_fullname;szLegacyMetadata.get_fullnamecCs|j|}|tkS)z+return True if name is a valid metadata key)rr)r|rRrrris_fieldAs
zLegacyMetadata.is_fieldcCs|j|}|tkS)N)rr)r|rRrrris_multi_fieldFs
zLegacyMetadata.is_multi_fieldc
Cs.tj|ddd}z|j|Wd|jXdS)z*Read the metadata values from a file path.rzutf-8)encodingN)codecsopenryclose)r|filepathfprrrrxJszLegacyMetadata.readcCst|}|d|jd<xxtD]p}||kr*q|tkrh|j|}|tkrZ|dk	rZdd|D}|j||q||}|dk	r|dkr|j||qW|jdS)z,Read the metadata values from a file object.zmetadata-versionzMetadata-VersionNcSsg|]}t|jdqS),)tuplesplit).0rOrrr
<listcomp>_sz,LegacyMetadata.read_file.<locals>.<listcomp>rD)rrvrrZget_all_LISTTUPLEFIELDSrr{)r|ZfileobmsgfieldvaluesrOrrrryRs

zLegacyMetadata.read_filec
Cs0tj|ddd}z|j||Wd|jXdS)z&Write the metadata fields to filepath.wzutf-8)rN)rr
write_filer)r|rskip_unknownrrrrrhszLegacyMetadata.writecCs|jxt|dD]}|j|}|r:|dgdgfkr:q|tkrX|j||dj|q|tkr|dkr|jd
kr|jdd}n|jdd	}|g}|t	krd
d|D}x|D]}|j|||qWqWdS)z0Write the PKG-INFO format data to a file object.zMetadata-VersionrDrr!1.01.1rz	
        z	
       |cSsg|]}dj|qS)r)join)rrOrrrrsz-LegacyMetadata.write_file.<locals>.<listcomp>N)rr)
r{r?rrrrrrQror)r|Z
fileobjectrrrrOrrrrps$


zLegacyMetadata.write_filecsfdd}|snHt|dr>x<|jD]}||||q&Wnx|D]\}}|||qDW|r~x|jD]\}}|||qhWdS)aSet metadata values from the given iterable `other` and kwargs.

        Behavior is like `dict.update`: If `other` has a ``keys`` method,
        they are looped over and ``self[key]`` is assigned ``other[key]``.
        Else, ``other`` is an iterable of ``(key, value)`` iterables.

        Keys that don't match a metadata field or that have an empty value are
        dropped.
        cs"|tkr|rjj||dS)N)rrr)rNrO)r|rr_setsz#LegacyMetadata.update.<locals>._setr@N)hasattrr@rE)r|otherkwargsrkvr)r|rrzs

zLegacyMetadata.updatecCsn|j|}|tks|dkrPt|ttfrPt|trJdd|jdD}q~g}n.|tkr~t|ttfr~t|trz|g}ng}tj	t
jrB|d}t|j
}|tkr|dk	rx|D](}|j|jddstjd	|||qWn`|tko|dk	r|j|sBtjd
|||n0|tkrB|dk	rB|j|sBtjd
||||tkr`|dkr`|j|}||j|<dS)z"Control then set a metadata field.rcSsg|]}|jqSr)strip)rrrrrrsz&LegacyMetadata.set.<locals>.<listcomp>rrN;rz$'%s': '%s' is not valid (field '%s')z.'%s': '%s' is not a valid version (field '%s')r!)rr
isinstancelistrrrrloggerZisEnabledForloggingZWARNINGr
rw_PREDICATE_FIELDSis_valid_matcherwarning_VERSIONS_FIELDSis_valid_constraint_list_VERSION_FIELDSis_valid_version_UNICODEFIELDSrrv)r|rRrOZproject_namerwrrrrrs@








zLegacyMetadata.setcCs|j|}||jkr*|tkr&|j|}|S|tkr@|j|}|S|tkr|j|}|dkr^gSg}x6|D].}|tkr|j|qh|j|d|dfqhW|S|tkr|j|}t	|t
r|jdS|j|S)zGet a metadata field.Nrrr)rrv_MISSINGrrrrrFrrrr)r|rRrrrOresvalrrrrs.








zLegacyMetadata.getcs|jgg}}xd
D]}||kr|j|qW|rT|gkrTddj|}t|xdD]}||krZ|j|qZW|ddkr||fSt|jfd	d
}xdt|ftjft	j
ffD]F\}}x<|D]4}	|j|	d}
|
dk	o||
r|jd|	|
fqWqW||fS)zkCheck if the metadata is compliant. If strict is True then raise if
        no Name or Version are providedrrzmissing required metadata: %sz, 	Home-pager$zMetadata-Versionz1.2cs*x$|D]}j|jddsdSqWdS)NrrFT)rr)rOr)rwrrare_valid_constraintss
z3LegacyMetadata.check.<locals>.are_valid_constraintsNzWrong value for '%s': %s)rr)rr$)r{rFrrr
rwrrrrrr)r|strictmissingwarningsattrrrrMZ
controllerrrOr)rwrchecks2




zLegacyMetadata.checkcCs|jdB}i}x,|D]$\}}|s.||jkr||||<qW|ddkrdK}x|D]F\}}|sn||jkrV|d&kr||||<qVd,d-||D||<qVWnF|dd.krdO}x2|D]*\}}|s||jkr||||<qW|S)PzReturn fields as a dict.

        Field names will be converted to use the underscore-lowercase style
        instead of hyphen-mixed case (i.e. home_page instead of Home-page).
        rQMetadata-VersionrRrr>rrTr rW	Home-pagerXr$rYAuthor-emailr\r&rUr!rVr"rSrclassifiersr(r^Download-URLz1.2ra
Requires-DistrcRequires-PythonrdRequires-Externalr`
Provides-Distr_Obsoletes-DistrhProject-URLrZr-r[Maintainer-emailcSsg|]}dj|qS)r)r)rurrrrGsz)LegacyMetadata.todict.<locals>.<listcomp>z1.1rfr+rer,rgr*rQrrRrr>rrTr rWrrXr$rYrr\r&rUr!rVr"rSrrr(r^r)
rrrrrrrrrrrrrrarrcrrdrr`rr_rrhrrZr-r[r)rrrrrrrrrfr+rer,rgr*)rrr)r{rv)r|Zskip_missingZmapping_1_0datarNrZmapping_1_2Zmapping_1_1rrrtodictsP
zLegacyMetadata.todictcCs<|ddkr(xdD]}||kr||=qW|d|7<dS)NzMetadata-Versionz1.1r*r,r+z
Requires-Dist)r*r,r+r)r|requirementsrrrradd_requirementsUs


zLegacyMetadata.add_requirementscCstt|dS)NzMetadata-Version)rr?)r|rrrr@`szLegacyMetadata.keysccsx|jD]
}|Vq
WdS)N)r@)r|rNrrr__iter__cszLegacyMetadata.__iter__csfddjDS)Ncsg|]}|qSrr)rrN)r|rrrhsz)LegacyMetadata.values.<locals>.<listcomp>)r@)r|r)r|rrgszLegacyMetadata.valuescsfddjDS)Ncsg|]}||fqSrr)rrN)r|rrrksz(LegacyMetadata.items.<locals>.<listcomp>)r@)r|r)r|rrEjszLegacyMetadata.itemscCsd|jj|j|jfS)Nz
<%s %s %s>)	__class__rrRr>)r|rrr__repr__mszLegacyMetadata.__repr__)NNNrr)F)F)F)N)F)F)"rrrrrr{rrrrrrrrrrrrrxryrrrzrrrrrrr@rrrErrrrrrqs>	




,
,
;rqzpydist.jsonz
metadata.jsonc@seZdZdZejdZejdejZe	Z
ejdZdZde
ZffdIdZd	Zd
ZeffedJfe
dKfedLfdZdMZdNddZedOZdefZdefZdefdefeeedefeeeedefdPdQd
Z[[dd ZdRd!d"Zd#d$Zed%d&Z ed'd(Z!e!j"d)d(Z!dSd*d+Z#ed,d-Z$ed.d/Z%e%j"d0d/Z%d1d2Z&d3d4Z'd5d6Z(d7d8Z)d9d:d;d<d=dd>Z*d?d@Z+dTdCdDZ,dEdFZ-dGdHZ.dS)Urz
    The metadata of a release. This implementation uses 2.0 (JSON)
    metadata where possible. If not possible, it wraps a LegacyMetadata
    instance which handles the key-value metadata format.
    z
^\d+(\.\d+)*$z!^[0-9A-Z]([0-9A-Z_.-]*[0-9A-Z])?$z	.{1,2047}z2.0zdistlib (%s)legacy)rRr>rTzqname version license summary description author author_email keywords platform home_page classifiers download_urlzwextras run_requires test_requires build_requires dev_requires provides meta_requires obsoleted_by supports_environments)rQrRr>rT_legacy_datarwNrrcCs0|||gjddkrtdd|_d|_||_|dk	rzy|j||||_Wn*tk
rvt||d|_|jYnXnd}|rt	|d}|j
}WdQRXn|r|j
}|dkr|j|jd|_ndt
|ts|jd}ytj||_|j|j|Wn0tk
r*tt||d|_|jYnXdS)Nrsz'path, fileobj and mapping are exclusive)rrwrb)rQ	generatorzutf-8)r~rw)rtrurrrw_validate_mappingrrqvalidaterrxMETADATA_VERSION	GENERATORrr	decodejsonloads
ValueErrorr)r|r}r~rrwrfrrrrs<



zMetadata.__init__rRr>r\rVrTz
Requires-DistzSetup-Requires-DistzProvides-Extrar(Download-URLMetadata-Version)
run_requiresbuild_requiresdev_requiresZ
test_requires
meta_requiresextrasmodules
namespacesexportscommandsrZ
source_urlrQc
CsZtj|d}tj|d}||kr||\}}|jr^|dkrP|dkrHdn|}n|jj|}n|dkrjdn|}|dkr|jj||}nt}|}|jjd}	|	r|dkr|	jd	|}nR|dkr|	jd
}	|	r|	j||}n.|	jd}	|	s|jjd}	|	r|	j||}||krV|}n:||kr4tj||}n"|jrJ|jj|}n|jj|}|S)
Ncommon_keysmapped_keysrrrrr
extensionszpython.commandszpython.detailszpython.exports)rrrrr)object__getattribute__rrr)
r|rNcommonmappedlkZmakerresultrOsentineldrrrrsF




zMetadata.__getattribute__cCsH||jkrD|j|\}}|p |j|krD|j|}|sDtd||fdS)Nz.'%s' is an invalid value for the '%s' property)SYNTAX_VALIDATORSrwmatchr)r|rNrOrwpattern
exclusionsmrrr_validate_values

zMetadata._validate_valuecCs*|j||tj|d}tj|d}||kr||\}}|jrV|dkrJt||j|<nf|d
krj||j|<nR|jjdi}|dkr||d	<n2|dkr|jd
i}|||<n|jdi}|||<nh||krtj|||nP|dkrt|t	r|j
}|r|j}ng}|jr||j|<n
||j|<dS)Nrrrrrrrrzpython.commandszpython.detailszpython.exportsrV)rrrrr)r'rrrNotImplementedErrorr
setdefault__setattr__rrrr)r|rNrOrrrrr!rrrr*s>




zMetadata.__setattr__cCst|j|jdS)NT)rprRr>)r|rrrname_and_version@szMetadata.name_and_versioncCsF|jr|jd}n|jjdg}d|j|jf}||krB|j||S)Nz
Provides-Distrfz%s (%s))rrr)rRr>rF)r|rsrrrrfDs
zMetadata.providescCs |jr||jd<n
||jd<dS)Nz
Provides-Distrf)rr)r|rOrrrrfOsc
Cs|jr|}ng}t|pg|j}xl|D]d}d|kr@d|kr@d}n8d|krNd}n|jd|k}|rx|jd}|rxt||}|r&|j|dq&WxNdD]F}d|}	|	|kr|j|	|jjd	|g}|j|j|||d
qW|S)a
        Base method to get dependencies, given a set of extras
        to satisfy and an optional environment context.
        :param reqts: A list of sometimes-wanted dependencies,
                      perhaps dependent on extras and environment.
        :param extras: A list of optional components being requested.
        :param env: An optional environment for marker evaluation.
        extraenvironmentTrebuilddevtestz:%s:z%s_requires)renv)r/r0r1)	rrrrr
extendrGrget_requirements)
r|reqtsrr2rr!includerBrNerrrr4Vs0	




zMetadata.get_requirementscCs|jr|jS|jS)N)r_from_legacyr)r|rrr
dictionaryszMetadata.dictionarycCs|jrtnt|j|jSdS)N)rr(rrDEPENDENCY_KEYS)r|rrrdependenciesszMetadata.dependenciescCs|jrtn|jj|dS)N)rr(rrz)r|rOrrrr;sc	Cs|jd|jkrtg}x0|jjD]"\}}||kr&||kr&|j|q&W|rfddj|}t|x"|jD]\}}|j|||qpWdS)NrQzMissing metadata items: %sz, )	rrrMANDATORY_KEYSrErFrrr')	r|rrwrrNr%rrrrrrrszMetadata._validate_mappingcCsB|jr.|jjd\}}|s|r>tjd||n|j|j|jdS)NTz#Metadata: missing: %s, warnings: %s)rrrrrrrw)r|rrrrrrs
zMetadata.validatecCs(|jr|jjdSt|j|j}|SdS)NT)rrrr
INDEX_KEYS)r|rrrrrszMetadata.todictc
Cs|jr|jst|j|jd}|jjd}x2dD]*}||kr2|dkrLd	}n|}||||<q2W|jd
g}|dgkrzg}||d<d}x2|D]*\}}||kr||rd||ig||<qW|j|d<i}i}	|S)N)rQrTrRr>r\rTrUr]rr"rVrarrbrrerf)rRr>r\rTrUr]rarrbr)r?r@)rrAssertionErrorrrrrrf)
r|rZlmdrnkkwr@okrXrZrrrr8s0


zMetadata._from_legacyrrr&r r!)rRr>r\rTrUrcCsdd}|jr|jstt}|j}x*|jjD]\}}||kr2||||<q2W||j|j}||j|j	}|j
rt|j
|d<t||d<t||d<|S)NcSst}x|D]}|jd}|jd}|d}xb|D]Z}|rN|rN|j|q2d}|r^d|}|rx|rtd||f}n|}|jdj||fq2WqW|S)Nr-r.rer>z
extra == "%s"z(%s) and %sr)rraddr)Zentriesr5r7r-r2ZrlistrrBrrrprocess_entriess"



z,Metadata._to_legacy.<locals>.process_entrieszProvides-Extraz
Requires-DistzSetup-Requires-Dist)rrrArqLEGACY_MAPPINGrErrrrrsorted)r|rFrZnmdrBrDZr1Zr2rrr
_to_legacyszMetadata._to_legacyFTcCs||gjddkrtd|j|r`|jr4|j}n|j}|rP|j||dq|j||dn^|jrp|j}n|j}|rt	j
||ddddn.tj|dd}t	j
||ddddWdQRXdS)	Nrz)Exactly one of path and fileobj is needed)rTrs)Zensure_asciiindentZ	sort_keysrzutf-8)
rtr
rrrIrrr8rrdumprr)r|r}r~rrZ	legacy_mdr!rrrrrs&

zMetadata.writecCs|jr|jj|nt|jjdg}d}x"|D]}d|kr,d|kr,|}Pq,W|dkrhd|i}|jd|n t|dt|B}t||d<dS)Nrr.r-rer)rrrr)insertrrH)r|rralwaysentryZrsetrrrrs
zMetadata.add_requirementscCs*|jpd}|jpd}d|jj|j||fS)Nz	(no name)z
no versionz<%s %s %s (%s)>)rRr>rrrQ)r|rRr>rrrr(s

zMetadata.__repr__)r)r)r)r)rrrw)NNNrr)rRr>r\rVrT)rN)r
N)N)NN)NNFT)/rrrrrecompileZMETADATA_VERSION_MATCHERIZNAME_MATCHERrZVERSION_MATCHERZSUMMARY_MATCHERrrrr<r=r:r"	__slots__rrrrZ	none_listdictZ	none_dictrrr'r*propertyr+rfsetterr4r9r;rrrr8rGrIrrrrrrrrvsx


,+

'
*	%
)rrrrr r!r"r#r$r%r&)rrrrr'r r!r"r#r$r%r&r(r)r*r+r,)r*r+r,r(r))rrrrr'r r!r"r#r$r%r-r.r&r(r)r/r0r1r2r3r4)r1r2r3r/r4r-r.r0)rrrrr'r r!r"r#r$r%r-r.r&r(r)r/r0r1r2r3r4r5r6r7r8r9)r5r9r6r7r8)r2r/r1)r3)r)rr(r*r,r+r/r1r2r4r0r'r7r9r8)r0)r")r$r-r r!)F)BrZ
__future__rrZemailrrrrOr>rrcompatrrr	rAr
utilrrr>r
rZ	getLoggerrrrrrr__all__rrrPrrr:r;rIr<rJr=rKrrrzZEXTRA_REr?rPrrrrrrrrrrrmrprqZMETADATA_FILENAMEZWHEEL_METADATA_FILENAMErrrrr<module>	s








9


	
Back to Directory File Manager