Re2@sBdZddlmZddlZddlmZddlZddlZddlZddl m Z m Z ddl m Z mZmZddlmZdd lmZmZdd lmZmZejeZGd d d e ZGd dde ZGddde ZGddde ZdddgZdZ dZ!ej"dZ#ej"dZ$ddddddd d!d"d#d$f Z%ddddd%ddd d!d"d#d$d&d'd(d)d*fZ&d(d)d*d&d'fZ'ddddd%ddd d!d"d#d+d,d$d&d'd-d.d/d0d1d2fZ(d/d0d1d-d2d+d,d.fZ)ddddd%ddd d!d"d#d+d,d$d&d'd-d.d/d0d1d2d3d4d5d6d7fZ*d3d7d4d5d6fZ+e*d8d*d)fZ,d8fZ-e.Z/e/j0e%e/j0e&e/j0e(e/j0e*e/j0e,ej"d9Z1d:d;Z2d<d=Z3d>d?e/DZ4d@d?e4j5DZ6d0d-d/fZ7d1fZ8dfZ9dd&d(d*d)d-d/d0d2d.d%d5d7d6fZ:d.fZ;d fZ<d"d+ddfZ=e>Z?ej"dAZ@dBdCdDZAGdEdFdFe>ZBdGZCdHZDdIZEGdJdde>ZFdS)KzImplementation of the Metadata for Python packages PEPs. Supports all metadata formats (1.0, 1.1, 1.2, 1.3/2.1 and withdrawn 2.0). )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/builddir/build/BUILDROOT/alt-python35-pip-20.2.4-5.el8.x86_64/opt/alt/python35/lib/python3.5/site-packages/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 \|z zMetadata-VersionNameVersionPlatformSummary DescriptionKeywordsz Home-pageAuthorz Author-emailLicensezSupported-Platform Classifierz Download-URL ObsoletesProvidesRequiresZ MaintainerzMaintainer-emailzObsoletes-Distz Project-URLz Provides-Distz Requires-DistzRequires-PythonzRequires-ExternalzPrivate-Versionz Obsoleted-ByzSetup-Requires-Dist ExtensionzProvides-ExtrazDescription-Content-Typez"extra\s*==\s*("([^"]+)"|'([^']+)')cCsd|dkrtS|dkr tS|dkr0tS|dkrDttS|dkrTtSt|dS)Nz1.0z1.1z1.21.32.1z2.0)r)r*) _241_FIELDS _314_FIELDS _345_FIELDS _566_FIELDS _426_FIELDSr)versionrrr_version2fieldlistps     r1c Csdd}g}x?|jD]1\}}|gddfkrCq|j|qWddddd d g}xX|D]P}|tkrd|kr|jdtjd ||tkrd|kr|jdtjd ||tkrd|kr|jdtjd ||tkrMd|krM|jdtjd||tkrd |kr|dkr|jd tjd||t krsd |krs|jd tjd|qsWt |dkr|dSt |dkrtjd|t dd|ko'||t }d|koB||t }d |ko]||t}d |kox||t} t|t|t|t| dkrt d| r| r| r| rt|krtS|rdS|rdS|rd Sd S)z5Detect the best version depending on the fields used.cSs%x|D]}||krdSqWdS)NTFr)keysmarkersmarkerrrr _has_markers  z"_best_version.._has_markerUNKNOWNNz1.0z1.1z1.2z1.3z2.0z2.1zRemoved 1.0 due to %szRemoved 1.1 due to %szRemoved 1.2 due to %szRemoved 1.3 due to %sr zRemoved 2.1 due to %szRemoved 2.0 due to %srrz)Out of options - unknown metadata set: %szUnknown metadata setz,You used incompatible 1.1/1.2/2.0/2.1 fields)itemsappendr+removeloggerdebugr,r-r.r/lenr _314_MARKERS _345_MARKERS _566_MARKERS _426_MARKERSintr) fieldsr5r2keyvalueZpossible_versionsZis_1_1Zis_1_2Zis_2_1Zis_2_0rrr _best_version~s`          0  rEcCs+i|]!}||jjddqS)-_)lowerreplace).0namerrr s rLcCsi|]\}}||qSrr)rJattrfieldrrrrLs z[^A-Za-z0-9.]+FcCsD|r6tjd|}tjd|jdd}d||fS)zhReturn the distribution name with version. If for_filename is true, return a filename-escaped form.rF .z%s-%s) _FILESAFEsubrI)rKr0Z for_filenamerrr_get_name_and_versionsrSc@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)?LegacyMetadataaoThe legacy metadata of a release. Supports versions 1.0, 1.1, 1.2, 2.0 and 1.3/2.1 (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*tdi|_g|_d|_||_|dk rj|j|n?|dk r|j|n#|dk r|j||j dS)Nz'path, fileobj and mapping are exclusive) count TypeError_fieldsZrequires_filesZ _dependenciesschemeread read_fileupdateset_metadata_version)selfpathfileobjmappingrZrrr__init__s         zLegacyMetadata.__init__cCst|j|jd_s z,LegacyMetadata.read_file..r6r )rrYrorqget_all_LISTTUPLEFIELDSrh get_payload)r_ZfileobmsgrNvaluesrDbodyrrrr\Rs      zLegacyMetadata.read_filec Cs>tj|ddd}z|j||Wd|jXdS)z&Write the metadata fields to filepath.wrzutf-8N)rr write_filer)r_r skip_unknownrrrrrdnszLegacyMetadata.writecCs|jx t|dD]}|j|}|rQ|dgdgfkrQq|tkr||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-Versionr6rr 1.01.1rvz z |cSsg|]}dj|qS)r)join)rJrDrrrrs z-LegacyMetadata.write_file..N)rr) r^r1rfrrrerrqrwrIr)r_ fileobjectrrNrrDrrrrvs$       zLegacyMetadata.write_filec sfdd}|sn^t|drUxL|jD]}||||q7Wn$x!|D]\}}|||q\W|rx'|jD]\}}|||qWdS)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+|r+jj||dS)N)rprhrj)rCrD)r_rr_setsz#LegacyMetadata.update.._setr2N)hasattrr2r7)r_otherkwargsrkvr)r_rr]s zLegacyMetadata.updatecCs|j|}|tks'|dkrtt|ttf rtt|trkdd|jdD}qg}nC|tkrt|ttf rt|tr|g}ng}tj t j r|d}t |j }|tkr@|dk r@x|D]8}|j|jddstjd |||qWn}|tkr|dk r|j|stjd |||n=|tkr|dk r|j|stjd ||||tkr|d kr|j|}||j|.rrN;rz$'%s': '%s' is not valid (field '%s')z.'%s': '%s' is not a valid version (field '%s')r )rjrr isinstancelistrrrrqr: isEnabledForloggingWARNINGr rZ_PREDICATE_FIELDSis_valid_matcherwarning_VERSIONS_FIELDSis_valid_constraint_list_VERSION_FIELDSis_valid_version_UNICODEFIELDSrzrY)r_rKrD project_namerZrrrrrhs@          zLegacyMetadata.setcCs|j|}||jkr=|tkr9|j|}|S|tkrZ|j|}|S|tkr|j|}|dkrgSg}xE|D]=}|tkr|j|q|j|d|dfqW|S|tkr |j|}t |t r |j dS|j|S)zGet a metadata field.Nrrr) rjrY_MISSINGrsrrqrr8rrrrr)r_rKrUrDresvalrrrrfs.           zLegacyMetadata.getc sl|jgg}}x'd D]}||kr|j|qW|rr|gkrrddj|}t|x'dD]}||kry|j|qyW|ddkr||fSt|jfd d }xt|ftjft j ffD]_\}}xP|D]H} |j | d } | d k r||  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.2cs5x.|D]&}j|jddsdSqWdS)NrrFT)rr)rDr)rZrrare_valid_constraintss z3LegacyMetadata.check..are_valid_constraintsNzWrong value for '%s': %s)rr)rr") r^r8rrr rZrrrrrrf) r_strictmissingwarningsrMrrrB controllerrNrDr)rZrchecks2           zLegacyMetadata.checkcCs|jt|d}i}xf|D]^}| sC||jkr't|}|dkrj||||.)r^r1rY _FIELD2ATTR)r_Z skip_missingrBdatarlrCrrrtodict s    zLegacyMetadata.todictcCsF|ddkr4x!dD]}||kr||=qW|d|7.)r2)r_r)r_rrIszLegacyMetadata.valuescsfddjDS)Ncs g|]}||fqSrr)rJrC)r_rrrMs z(LegacyMetadata.items..)r2)r_r)r_rr7LszLegacyMetadata.itemscCsd|jj|j|jfS)Nz <%s %s %s>) __class__rrKr0)r_rrr__repr__OszLegacyMetadata.__repr__)"rrrrrcr^rergrirmrnrjrsrzr|r}r~rr[r\rdrr]rhrrfrrrr2rrr7rrrrrrTs>                 ,,    rTz pydist.jsonz metadata.jsonMETADATAc@seZdZdZejdZejdejZe Z ejdZ dZ de Zdfdfd d^iZd Zd Zd effded_fde d`fd e dafiZdbZddddddZedcZdefZdefZddefddefdedededdefd ed!ed"ed#ed$d%efd&ddd dei Z[[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)ddCddDdfdGd dHdIdJdgdNdhdQdidSd&d'djd%i Z*dTdUZ+dddVdWdXdYZ,dZd[Z-d\d]Z.dS)krz 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)rKr0summarylegacyzqname 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_environmentsrw_legacy_datarZNrUcCs|||gjddkr*tdd|_d|_||_|dk ry|j||||_Wqtk rtd|d||_|jYqXnd}|rt |d}|j }WdQRXn|r|j }|dkrd|j d|j i|_nt |ts6|jd}y)tj||_|j|j|Wn:tk rtd t|d||_|jYnXdS) NrVz'path, fileobj and mapping are exclusiverbrZrbrw generatorzutf-8ra)rWrXrrrZ_validate_mappingrrTvalidaterr[METADATA_VERSION GENERATORrr decodejsonloads ValueErrorr)r_r`rarbrZrfrrrrcs<            zMetadata.__init__licensekeywords run_requiresz Requires-Distbuild_requireszSetup-Requires-Dist dev_requiresZ test_requires meta_requiresextraszProvides-Extramodules namespacesexportscommands classifiersr$ source_url Download-URLMetadata-Versionc Cstj|d}tj|d}||kr||\}}|jr|dkrs|dkrgdn|}q|jj|}q|dkrdn|}|d kr|jj||}qt}|}|jjd} | r|dkr| jd |}nu|dkrE| jd } | r| j||}n?| jd } | sl|jjd } | r| j||}||kr|}nQ||krtj||}n0|jr|jj|}n|jj|}|S) N common_keys mapped_keysrrrrr extensionszpython.commandszpython.detailszpython.exports)rrrrr)object__getattribute__rrfr) r_rCcommonmappedlkmakerresultrDsentineldrrrrsF           zMetadata.__getattribute__cCsf||jkrb|j|\}}|p.|j|krb|j|}|sbtd||fdS)Nz.'%s' is an invalid value for the '%s' property)SYNTAX_VALIDATORSrZmatchr)r_rCrDrZpattern exclusionsmrrr_validate_valueszMetadata._validate_valuecCs|j||tj|d}tj|d}||kr||\}}|jr{|dkrkt||j|             zMetadata.__setattr__cCst|j|jdS)NT)rSrKr0)r_rrrname_and_version#szMetadata.name_and_versioncCsa|jr|jd}n|jjdg}d|j|jf}||kr]|j||S)Nz Provides-Distprovidesz%s (%s))rrrrKr0r8)r_rsrrrr's   zMetadata.providescCs*|jr||jd|D]6}y||}Wqtt fk rd}PYqXqW|rG|||.process_entriesTFzProvides-Extraz Requires-DistzSetup-Requires-Dist)rrrrTLEGACY_MAPPINGr7rrrk IndexErrorrrrrrsorted) r_r rZnmdrrrfoundrZr1Zr2rrr _to_legacys2       zMetadata._to_legacyFTcCs||gjddkr'td|j|r|jrL|j}n |j}|rt|j|d|q|j|d|n|jr|j}n |j}|rt j ||ddddddnAt j |d d )}t j ||ddddddWdQRXdS) Nrz)Exactly one of path and fileobj is neededr ensure_asciiTindentrV sort_keysrzutf-8) rWrrrr%rdrrrrdumprr)r_r`rarrZ legacy_mdrrrrrrds&        zMetadata.writecCs|jr|jj|n|jjdg}d}x-|D]%}d|kr>d|kr>|}Pq>W|dkrd|i}|jd|n*t|dt|B}t||d)rKr0rrrw)r_rKr0rrrrs zMetadata.__repr__)r)r)r)r)rrrZ)rKr0rrr)rN)rN)rrr)rrrr)rrrrrK)rrrrr)rrr)/rrrrrecompileZMETADATA_VERSION_MATCHERIZ NAME_MATCHERrZVERSION_MATCHERZSUMMARY_MATCHERrrrr r rr __slots__rcrhrrZ none_listdictZ none_dictrrrrpropertyrrsetterrrrrrrrr!r%rdrrrrrrrYs       ,         + ' *     2 )Gr __future__rrrrrrr-r rrcompatrrr r3r utilr r r0r r getLoggerrr:rrrr__all__rrr.ryrxr+r,r=r-r>r/r@r.r?rhror]ZEXTRA_REr1rErpr7rrrrrqrrrrrrrQrSrTZMETADATA_FILENAMEZWHEEL_METADATA_FILENAMEZLEGACY_METADATA_FILENAMErrrrr s                                             I             i