0{YϏ@sdZddlmZddlZddlmZddlZddlZddlZddl m Z m Z ddl m Z mZmZddlmZdd lmZmZdd lmZmZejeZGd d d e ZGd dde ZGddde ZGddde ZdddgZdZ dZ!ej"dZ#dddddddd d!d"d#f Z$ddddd$dddd d!d"d#d%d&d'd(d)fZ%d'd(d)d%d&fZ&ddddd$dddd d!d"d*d+d#d%d&d,d-d.d/d0d1fZ'd.d/d0d,d1d*d+d-fZ(ddddd$dddd d!d"d*d+d#d%d&d,d-d.d/d0d1d2d3d4d5d6fZ)d2d6d3d4d5fZ*e+Z,e,j-e$e,j-e%e,j-e'e,j-e)ej"d7Z.d8d9Z/d:d;Z0idd<6dd=6dd>6dd?6d$d@6ddA6ddB6ddC6d dD6d!dE6d"dF6d*dG6d+dH6d#dI6d%dJ6d&dK6d,dL6d.dM6d/dN6d4dO6d0dP6d1dQ6d)dR6d(dS6d'dT6d-dU6d2dV6d3dW6d5dX6d6dY6Z1d/d,d.fZ2d0fZ3dfZ4dd%d'd)d(d,d.d/d1d-d$d4d6d5fZ5d-fZ6dfZ7d!d*ddfZ8e9Z:ej"dZZ;d[d\d]Z<Gd^d_d_e9Z=d`Z>Gdadde9Z?dS)bzImplementation 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_schemePEP426_VERSION_REc@seZdZdZdS)MetadataMissingErrorzA required metadata is missingN)__name__ __module__ __qualname____doc__rr7/tmp/pip-ok8sy_ze-build/pip/_vendor/distlib/metadata.pyrs rc@seZdZdZdS)MetadataConflictErrorz>Attempt to read or write metadata fields that are conflictual.N)rrrrrrrrr s rc@seZdZdZdS) MetadataUnrecognizedVersionErrorz Unknown metadata version number.N)rrrrrrrrr$s rc@seZdZdZdS)MetadataInvalidErrorzA metadata value is invalidN)rrrrrrrrr(s rMetadataPKG_INFO_ENCODINGPKG_INFO_PREFERRED_VERSIONzutf-8z1.1z \|zMetadata-VersionNameVersionPlatformSummary DescriptionKeywordsz Home-pageAuthorz Author-emailLicensezSupported-Platform Classifierz Download-URL ObsoletesProvidesRequires MaintainerzMaintainer-emailzObsoletes-Distz Project-URLz Provides-Distz Requires-DistzRequires-PythonzRequires-ExternalzPrivate-Versionz Obsoleted-ByzSetup-Requires-Dist ExtensionzProvides-Extraz"extra\s*==\s*("([^"]+)"|'([^']+)')cCsP|dkrtS|dkr tS|dkr0tS|dkr@tSt|dS)Nz1.0z1.1z1.2z2.0) _241_FIELDS _314_FIELDS _345_FIELDS _426_FIELDSr)versionrrr_version2fieldlistfs    r/c Csdd}g}xB|jD]4\}}|gddfkrFqn|j|qWddddg}x|D]}|tkrd|kr|jdn|tkrd|kr|jdn|tkrd|kr|jdn|tkrpd|krp|jdqpqpWt|d kr4|d St|d krUtd nd|kom||t }d|ko||t }d|ko||t }t |t |t |d krtd n| r| r| rt |krt Sn|r dS|rdSdS) z5Detect the best version depending on the fields used.cSs%x|D]}||krdSqWdS)NTFr)keysmarkersmarkerrrr _has_markerts  z"_best_version.._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) fieldsr3r0keyvalueZpossible_versionsZis_1_1Zis_1_2Zis_2_0rrr _best_versionrsB  & r@metadata_versionnamer.platformZsupported_platformsummary descriptionkeywords home_pageauthor author_email maintainermaintainer_emaillicense classifier download_urlobsoletes_dist provides_dist requires_distsetup_requires_distrequires_pythonrequires_externalrequiresprovides obsoletes project_urlZprivate_versionZ obsoleted_by extensionZprovides_extraz[^A-Za-z0-9.]+FcCsG|r9tjd|}tjd|jdd}nd||fS)zhReturn the distribution name with version. If for_filename is true, return a filename-escaped form.- .z%s-%s) _FILESAFEsubreplace)rBr.Z for_filenamerrr_get_name_and_versions!r`c@seZdZdZddddddZddZdd Zd d Zd d ZddZ ddZ ddZ ddZ ddZ ddZdddZddZdd Zd!d"Zd#d$Zdd%d&Zdd'd(Zdd)d*Zd+d,Zed-d.Zdd/d0Zdd1d2Zd3d4Zd5d6Zd7d8Zd9d:Zd;d<Z d=d>Z!dS)?LegacyMetadataaaThe 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 NdefaultcCs|||gjddkr-tdni|_g|_d|_||_|dk rm|j|nB|dk r|j|n&|dk r|j||j ndS)Nz'path, fileobj and mapping are exclusive) count TypeError_fieldsZrequires_filesZ _dependenciesschemeread read_fileupdateset_metadata_version)selfpathfileobjmappingrgrrr__init__s        zLegacyMetadata.__init__cCst|j|jd[s z,LegacyMetadata.read_file..r4)rrfr}rget_all_LISTTUPLEFIELDSrurk)rlZfileobmsgfieldvaluesr?rrrriNs     zLegacyMetadata.read_filec Cs>tj|ddd}z|j||Wd|jXdS)z&Write the metadata fields to filepath.wrzutf-8N)rr write_filer)rlr skip_unknownrrrrrqdszLegacyMetadata.writecCs |jxt|dD]}|j|}|rT|dgdgfkrTqn|tkr|j||dj|qn|tkr|dkr|jdd}n|g}n|tkrdd|D}nx!|D]}|j|||qWqWd S) z0Write the PKG-INFO format data to a file object.zMetadata-Versionr4rr rz |cSsg|]}dj|qS)r)join)rr?rrrr}s z-LegacyMetadata.write_file..N) rkr/rsrrrrrr_r)rl fileobjectrrrr?rrrrls        zLegacyMetadata.write_filec sfdd}|sn^t|drUxL|jD]}||||q7Wn$x!|D]\}}|||q\W|rx*|jD]\}}|||qWndS)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. cs2|tkr.|r.jj||ndS)N)rrurw)r>r?)rlrr_setsz#LegacyMetadata.update.._setr0N)hasattrr0r5)rlotherkwargsrkvr)rlrrjs zLegacyMetadata.updatecCs |j|}|tks'|dkrtt|ttf rtt|trkdd|jdD}qg}nF|tkrt|ttf rt|tr|g}qg}ntj t j r|d}t |j }|tkrF|dk rFx|D];}|j|jddstjd |||qqWq|tkr|dk r|j|stjd |||qq|tkr|dk r|j|stjd |||qqn|tkr|d kr|j|}qn||j|.rrN;rz%r: %r is not valid (field %r)z(%r: %r is not a valid version (field %r)r )rwr isinstancelistrrrrlogger isEnabledForloggingWARNINGr rg_PREDICATE_FIELDSis_valid_matcherwarning_VERSIONS_FIELDSis_valid_constraint_list_VERSION_FIELDSis_valid_version_UNICODEFIELDSrrf)rlrBr? project_namergrrrrrus@          zLegacyMetadata.setcCs|j|}||jkr@|tkr<|j|}n|S|tkr]|j|}|S|tkr|j|}|dkrgSg}xE|D]=}|tkr|j|q|j|d|dfqW|S|tkr|j|}t |t r|j dSn|j|S)zGet a metadata field.Nrrr) rwrf_MISSINGrrrrr6rrrr)rlrBrbr?resvalrrrrss.          zLegacyMetadata.getc sx|jgg}}x*d D]"}||kr|j|qqW|rx|gkrxddj|}t|nx*dD]"}||kr|j|qqW|ddkr||fSt|jfd d }xt|ftjft j ffD]b\}}xS|D]K} |j | d } | d k r||  r|jd | | fqqWqW||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.2cs5x.|D]&}j|jddsdSqWdS)NrrFT)rr)r?r)rgrrare_valid_constraintss z3LegacyMetadata.check..are_valid_constraintsNzWrong value for %r: %s)zNamezVersion)rr") rkr6rrr rgrrrrrrs) rlstrictmissingwarningsattrrrr=Z controllerrr?r)rgrchecks2          "zLegacyMetadata.checkcCs0|jdB}i}x;|D]3\}}| s?||jkr|||||D]3\}}| s||jkr||||.z1.1rVr&rUr'rWr%zmetadata_versionrznamezNamezversionzVersionzsummaryrrGrzauthorzAuthorz author_emailrzlicenser#z descriptionz Descriptionzkeywordsr!zplatformzPlatformz classifierz Classifierz download_urlr) rrrrrrrrrrrrrz requires_distrrSrrTrrPrrOrrXrz maintainerr(zmaintainer_emailr)rrrrrrrrzprovideszProvideszrequireszRequiresz obsoletesz Obsoletes)rrr)rkrf)rlZ skip_missingZ mapping_1_0datar>ryZ mapping_1_2Z mapping_1_1rrrtodictsP  %zLegacyMetadata.todictcCsL|ddkr:x'dD]}||kr||=qqWn|d|7rrr__iter__\szLegacyMetadata.__iter__csfddjDS)Ncsg|]}|qSrr)rr>)rlrrras z)LegacyMetadata.values..)r0)rlr)rlrr`szLegacyMetadata.valuescsfddjDS)Ncs g|]}||fqSrr)rr>)rlrrrds z(LegacyMetadata.items..)r0)rlr)rlrr5cszLegacyMetadata.itemscCsd|jj|j|jfS)Nz <%s %s %s>) __class__rrBr.)rlrrr__repr__fszLegacyMetadata.__repr__)"rrrrrprkrrrtrvrzr{rwrrrrrrrhrirqrrjrurrsrrrr0rrr5rrrrrras>                 ,,;    raz pydist.jsonc@seZdZdZejdZejdejZe Z ejdZ dZ de Zifd6fd6dSd 6Zd Zd Zieffd 6edTfd6e dUfd6e dVfd 6ZdWZddddddZedXZdefZdefZi defd6defd6ed6ed6ed6defd6ed 6ed!6ed"6ed#6d$efd%6dYd'6dZd 6Z[[d)d*Zdd+d,Zd-d.Zed/d0Z ed1d2Z!e!j"d3d2Z!ddd4d5Z#ed6d7Z$ed8d9Z%e%j"d:d9Z%d;d<Z&d=d>Z'd?d@Z(dAdBZ)idCd6dDd6dEd6dFd 6dGdH6d$d%6Z*dIdJZ+dddKdLdMdNZ,dOdPZ-dQdRZ.dS)[rz 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)rBr.legacyrDzqname 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_environmentsrA_legacy_datargNrbcCs|||gjddkr-tdnd|_d|_||_|dk ry|j||||_Wqtk rtd|d||_|jYqXnd}|rt |d}|j }WdQXn|r|j }n|dkri|j d6|j d6|_nt |ts@|jd}ny)tj||_|j|j|Wn:tk rtd t|d||_|jYnXdS) Nrcz'path, fileobj and mapping are exclusiverorgrbrA generatorzutf-8rn)rdrerrrg_validate_mappingrravalidaterrhMETADATA_VERSION GENERATORrr decodejsonloads ValueErrorr)rlrmrnrorgrfrrrrps>          zMetadata.__init__rLrFz Requires-Dist run_requireszSetup-Requires-Distbuild_requires dev_requiresZ test_requires meta_requireszProvides-Extraextrasmodules namespacesexportscommandsr$ classifiers Download-URLZ source_urlMetadata-VersioncCstj|d}tj|d}||kr||\}}|jr|dkrs|dkrgdn|}q|jj|}q |dkrdn|}|jj||}nQ||krtj||}n0|jr|jj|}n|jj|}|S)N common_keys mapped_keys)object__getattribute__rrsr)rlr>commonmappedlkmakerresultr?rrrr s      zMetadata.__getattribute__cCso||jkrk|j|\}}|p.|j|krk|j|}|shtd||fqhqkndS)Nz*%r is an invalid value for the %r property)SYNTAX_VALIDATORSrgmatchr)rlr>r?rgpattern exclusionsmrrr_validate_valueszMetadata._validate_valuecCs"|j||tj|d}tj|d}||kr||\}}|jr~|dkrntn||j|r?r r r r|rrrrs*         zMetadata.__setattr__cCst|j|jdS)NT)r`rBr.)rlrrrname_and_versionszMetadata.name_and_versioncCsd|jr|jd}n|jjdg}d|j|jf}||kr`|j|n|S)Nz Provides-DistrVz%s (%s))rr setdefaultrBr.r6)rlrsrrrrVs  zMetadata.providescCs*|jr||jderrrr",s0          zMetadata.get_requirementscCs|jr|jS|jS)N)r _from_legacyr)rlrrr dictionaryVs  zMetadata.dictionarycCs)|jrtnt|j|jSdS)N)rrr rDEPENDENCY_KEYS)rlrrr dependencies\s  zMetadata.dependenciescCs&|jrtn|jj|dS)N)rrrrj)rlr?rrrr*cs  c Cs|jd|jkr$tng}xH|jjD]7\}}||kr:||krq|j|qqq:q:W|rddj|}t|nx-|jD]\}}|j|||qWdS)NrAzMissing metadata items: %sz, ) rsrrMANDATORY_KEYSr5r6rrr) rlrorgrr>rrrrrrrrjs   zMetadata._validate_mappingcCs`|jrF|jjd\}}|s-|r\tjd||q\n|j|j|jdS)NTz#Metadata: missing: %s, warnings: %s)rrrrrrrg)rlrrrrrrxs    zMetadata.validatecCs6|jr|jjdSt|j|j}|SdS)NT)rrr r INDEX_KEYS)rlrrrrrs zMetadata.todictc Cs-|jr|j sti|jd6|jd6}|jjd}xFdD]>}||krL|d krsd }n|}||||.process_entrieszProvides-Extraz Requires-DistzSetup-Requires-Dist) rrr0raLEGACY_MAPPINGr5rrrrrsorted)rlr6rZnmdr1r3Zr1Zr2rrr _to_legacys     zMetadata._to_legacyFTcCs||gjddkr*tdn|j|r|jrO|j}n |j}|rw|j|d|q|j|d|n|jr|j}n |j}|rt j ||ddddddn@t j |d d )}t j ||ddddddWdQXdS) Nrz)Exactly one of path and fileobj is neededr ensure_asciiTindentrc sort_keysrzutf-8) rdrrrr9rqrr'rrdumprr)rlrmrnrrZ legacy_mdr$rrrrrqs&       zMetadata.writecCs|jr|jj|n|jjdg}d}x0|D](}d|kr>d|kr>|}Pq>q>W|dkri|d6}|jd|n*t|dt|B}t||d)rBr.rrrA)rlrBr.rrrrs zMetadata.__repr__)legacy)rA)rA)rA)z_legacyz_datazscheme)znamezversionzlicensezkeywordszsummary)rN)rN)/rrrrrecompileZMETADATA_VERSION_MATCHERIZ NAME_MATCHERrZVERSION_MATCHERZSUMMARY_MATCHERrrrr+r,r)r __slots__rprurrZ none_listdictZ none_dictrr rrpropertyrrVsetterr"r(r*rrrr'r7r9rqrrrrrrrns       ,           *     % )@r __future__rremailrrrrBr-rrcompatrrr r1r utilr r r.r r getLoggerrrrrrr__all__rrrCrr*r+r9r,r:r-r;rur}rjZEXTRA_REr/r@rrrrrrrrr rr]r`raZMETADATA_FILENAMErrrrr s                                         8