3 ”Re2˜ã@südZddlmZddlZddlmZddlZddlZddlZddl m Z m Z ddl m Z mZmZddlmZdd lmZmZdd lmZmZejeƒZGd d „d e ƒZGd d„de ƒZGdd„de ƒZGdd„de ƒZdddgZdZ dZ!ej"dƒZ#ej"dƒZ$dKZ%dLZ&dMZ'dNZ(dOZ)dPZ*dQZ+e*dRZ,dSZ-e.ƒZ/e/j0e%ƒe/j0e&ƒe/j0e(ƒe/j0e*ƒe/j0e,ƒej"d9ƒZ1d:d;„Z2dd?„e/DƒZ4d@d?„e4j5ƒDƒZ6dTZ7dUZ8dVZ9dWZ:dXZ;dYZƒZ?ej"dAƒZ@d[dCdD„ZAGdEdF„dFe>ƒZBdGZCdHZDdIZEGdJd„de>ƒZFdS)\z„Implementation 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_schemeÚPEP440_VERSION_REc@seZdZdZdS)ÚMetadataMissingErrorzA required metadata is missingN)Ú__name__Ú __module__Ú __qualname__Ú__doc__©rrú‹/builddir/build/BUILDROOT/alt-python36-pip-20.2.4-5.el8.x86_64/opt/alt/python36/lib/python3.6/site-packages/pip/_vendor/distlib/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(srÚMetadataÚPKG_INFO_ENCODINGÚPKG_INFO_PREFERRED_VERSIONzutf-8z1.1z \|z úMetadata-VersionÚNameÚVersionÚPlatformÚSummaryÚ DescriptionÚKeywordsú Home-pageÚAuthorú Author-emailÚLicenseúSupported-PlatformÚ Classifierú Download-URLÚ ObsoletesÚProvidesÚRequiresÚ MaintainerúMaintainer-emailúObsoletes-Distú Project-URLú Provides-Distú Requires-DistúRequires-PythonúRequires-ExternalúPrivate-Versionú Obsoleted-ByúSetup-Requires-DistÚ ExtensionúProvides-ExtraúDescription-Content-Typez"extra\s*==\s*("([^"]+)"|'([^']+)')cCsL|dkr tS|dkrtS|dkr$tS|dkr4ttS|dkr@tSt|ƒ‚dS)Nz1.0z1.1z1.2ú1.3ú2.1z2.0)r;r<)Ú _241_FIELDSÚ _314_FIELDSÚ _345_FIELDSÚ _566_FIELDSÚ _426_FIELDSr)ÚversionrrrÚ_version2fieldlistpsrCc CsRdd„}g}x.|jƒD]"\}}|gddfkr.q|j|ƒqWddddd d g}�xü|D]ô}|tkr~d|kr~|jdƒtjd |ƒ|tkr¤d|kr¤|jdƒtjd |ƒ|tkrÊd|krÊ|jdƒtjd |ƒ|tkrðd|krð|jdƒtjd|ƒ|tkoþd |k�r"|dk�r"|jd ƒtjd|ƒ|t krTd |krT|jd ƒtjd|ƒqTWt |ƒdk�rb|dSt |ƒdk�r„tjd|ƒt dƒ‚d|k�o–||t ƒ}d|k�oª||t ƒ}d |k�o¾||tƒ}d |k�oÒ||tƒ} t|ƒt|ƒt|ƒt| ƒdk�rt dƒ‚| �r0| �r0| �r0| �r0t|k�r0tS|�r:dS|�rDdS|�rNd Sd S)z5Detect the best version depending on the fields used.cSsx|D]}||krdSqWdS)NTFr)ÚkeysÚmarkersÚmarkerrrrÚ _has_marker€s z"_best_version.._has_markerÚUNKNOWNNz1.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)ÚitemsÚappendr=ÚremoveÚloggerÚdebugr>r?r@rAÚlenrÚ _314_MARKERSÚ _345_MARKERSÚ _566_MARKERSÚ _426_MARKERSÚintr) ÚfieldsrGrDÚkeyÚvalueZpossible_versionsZis_1_1Zis_1_2Zis_2_1Zis_2_0rrrÚ _best_version~s`              &  rWcCsi|]}||jƒjddƒ“qS)ú-Ú_)ÚlowerÚreplace)Ú.0Únamerrrú Çsr^cCsi|]\}}||“qSrr)r\ÚattrÚfieldrrrr^Êsz[^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.rXú Ú.z%s-%s)Ú _FILESAFEÚsubr[)r]rBZ for_filenamerrrÚ_get_name_and_versionßs rec@s eZdZdZd?dd„Zdd„Zdd „Zd d „Zd d „Zdd„Z dd„Z dd„Z dd„Z dd„Z dd„Zd@dd„Zdd„Zdd „Zd!d"„Zd#d$„ZdAd%d&„ZdBd'd(„ZdCd)d*„Zd+d,„Zefd-d.„ZdDd/d0„ZdEd1d2„Zd3d4„Zd5d6„Zd7d8„Zd9d:„Zd;d<„Z d=d>„Z!dS)FÚ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 NÚdefaultcCsz|||gjdƒdkrtdƒ‚i|_g|_d|_||_|dk rH|j|ƒn.|dk r\|j|ƒn|dk rv|j|ƒ|j ƒdS)Néz'path, fileobj and mapping are exclusive) ÚcountÚ TypeErrorÚ_fieldsZrequires_filesZ _dependenciesÚschemeÚreadÚ read_fileÚupdateÚset_metadata_version)ÚselfÚpathÚfileobjÚmappingrlrrrÚ__init__øs   zLegacyMetadata.__init__cCst|jƒ|jd<dS)NzMetadata-Version)rWrk)rqrrrrpsz#LegacyMetadata.set_metadata_versioncCs|jd||fƒdS)Nz%s: %s )Úwrite)rqrsr]rVrrrÚ _write_field szLegacyMetadata._write_fieldcCs |j|ƒS)N)Úget)rqr]rrrÚ __getitem__szLegacyMetadata.__getitem__cCs |j||ƒS)N)Úset)rqr]rVrrrÚ __setitem__szLegacyMetadata.__setitem__c Cs8|j|ƒ}y |j|=Wntk r2t|ƒ‚YnXdS)N)Ú _convert_namerkÚKeyError)rqr]Ú field_namerrrÚ __delitem__s   zLegacyMetadata.__delitem__cCs||jkp|j|ƒ|jkS)N)rkr|)rqr]rrrÚ __contains__s zLegacyMetadata.__contains__cCs(|tkr |S|jddƒjƒ}tj||ƒS)NrXrY)Ú _ALL_FIELDSr[rZÚ _ATTR2FIELDrx)rqr]rrrr|szLegacyMetadata._convert_namecCs|tks|tkrgSdS)NrH)Ú _LISTFIELDSÚ_ELEMENTSFIELD)rqr]rrrÚ_default_value%szLegacyMetadata._default_valuecCs&|jdkrtjd|ƒStjd|ƒSdS)Nú1.0ú1.1Ú )r†r‡)Úmetadata_versionÚ_LINE_PREFIX_PRE_1_2rdÚ_LINE_PREFIX_1_2)rqrVrrrÚ_remove_line_prefix*s  z"LegacyMetadata._remove_line_prefixcCs|tkr||St|ƒ‚dS)N)r‚ÚAttributeError)rqr]rrrÚ __getattr__0szLegacyMetadata.__getattr__FcCst|d|d|ƒS)zhReturn the distribution name with version. If filesafe is true, return a filename-escaped form.rr)re)rqZfilesaferrrÚ get_fullname;szLegacyMetadata.get_fullnamecCs|j|ƒ}|tkS)z+return True if name is a valid metadata key)r|r�)rqr]rrrÚis_fieldAs zLegacyMetadata.is_fieldcCs|j|ƒ}|tkS)N)r|rƒ)rqr]rrrÚis_multi_fieldFs zLegacyMetadata.is_multi_fieldc Cs.tj|ddd�}z|j|ƒWd|jƒXdS)z*Read the metadata values from a file path.Úrzutf-8)ÚencodingN)ÚcodecsÚopenrnÚclose)rqÚfilepathÚfprrrrmJszLegacyMetadata.readcCs°t|ƒ}|d|jd<xxtD]p}||kr*q|tkrh|j|ƒ}|tkrZ|dk rZdd„|Dƒ}|j||ƒq||}|dk r|dkr|j||ƒqW|jƒ}|r |n|d|d<dS)z,Read the metadata values from a file object.zmetadata-versionzMetadata-VersionNcSsg|]}t|jdƒƒ‘qS)ú,)ÚtupleÚsplit)r\rVrrrú _sz,LegacyMetadata.read_file..rHr!)rrkr�rƒÚget_allÚ_LISTTUPLEFIELDSrzÚ get_payload)rqZfileobÚmsgr`ÚvaluesrVÚbodyrrrrnRs  zLegacyMetadata.read_filec Cs0tj|ddd�}z|j||ƒWd|jƒXdS)z&Write the metadata fields to filepath.Úwzutf-8)r“N)r”r•Ú write_filer–)rqr—Ú skip_unknownr˜rrrrvnszLegacyMetadata.writecCsÌ|jƒx¾t|dƒD]®}|j|ƒ}|r:|dgdgfkr:q|tkrX|j||dj|ƒƒq|tkr’|dkrŒ|jd kr€|jddƒ}n |jdd ƒ}|g}|t kr¨d d „|Dƒ}x|D]}|j|||ƒq®WqWd S)z0Write the PKG-INFO format data to a file object.zMetadata-VersionrHr™r!ú1.0ú1.1rˆz z |cSsg|]}dj|ƒ‘qS)r™)Újoin)r\rVrrrrœŠsz-LegacyMetadata.write_file..N)r¦r§) rprCrxr„rwr¨rƒr‰r[rž)rqÚ fileobjectr¥r`r¡rVrrrr¤vs$    zLegacyMetadata.write_filec s‚‡fdd„}|snHt|dƒr>x<|jƒD]}||||ƒq&Wnx|D]\}}|||ƒqDW|r~x|jƒD]\}}|||ƒqhWdS)a…Set 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ˆjˆj|ƒ|ƒdS)N)r‚rzr|)rUrV)rqrrÚ_set™s z#LegacyMetadata.update.._setrDN)ÚhasattrrDrI)rqÚotherÚkwargsrªÚkÚvr)rqrro�s  zLegacyMetadata.updatecCsn|j|ƒ}|tks|dkrPt|ttfƒ rPt|tƒrJdd„|jdƒDƒ}q~g}n.|tkr~t|ttfƒ r~t|tƒrz|g}ng}tj t j ƒ�rB|d}t |j ƒ}|tkrâ|dk râx’|D](}|j|jdƒdƒs´tjd |||ƒq´Wn`|tkoð|dk �r|j|ƒ�sBtjd |||ƒn0|tk�rB|dk �rB|j|ƒ�sBtjd |||ƒ|tk�r`|d k�r`|j|ƒ}||j|<dS) z"Control then set a metadata field.rcSsg|] }|jƒ‘qSr)Ústrip)r\r¯rrrrœ²sz&LegacyMetadata.set..r™rNú;rz$'%s': '%s' is not valid (field '%s')z.'%s': '%s' is not a valid version (field '%s')r!)r|r„Ú isinstanceÚlistršrr›rƒrLÚ isEnabledForÚloggingÚWARNINGr rlÚ_PREDICATE_FIELDSÚis_valid_matcherÚwarningÚ_VERSIONS_FIELDSÚis_valid_constraint_listÚ_VERSION_FIELDSÚis_valid_versionÚ_UNICODEFIELDSrŒrk)rqr]rVÚ project_namerlr¯rrrrz«s@            zLegacyMetadata.setcCsÎ|j|ƒ}||jkr*|tkr&|j|ƒ}|S|tkr@|j|}|S|tkrž|j|}|dkr^gSg}x6|D].}|tkr€|j|ƒqh|j|d|dfƒqhW|S|tkrÄ|j|}t |t ƒrÄ|j dƒS|j|S)zGet a metadata field.Nrrr™) r|rkÚ_MISSINGr…r¾rƒržrJr„r²rr›)rqr]rgrVÚresÚvalrrrrx×s.          zLegacyMetadata.getc s |jƒgg}}xd D]}||kr|j|ƒqW|rT|gkrTddj|ƒ}t|ƒ‚xdD]}||krZ|j|ƒqZW|ddkrˆ||fSt|jƒ‰‡fd d „}xdt|ftˆjft ˆj ffD]F\}}x<|D]4} |j | d ƒ} | d k oè|| ƒ rÈ|jd | | fƒqÈWqºW||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|jdƒdƒsdSqWdS)Nr±rFT)r¸r›)rVr¯)rlrrÚare_valid_constraintss z3LegacyMetadata.check..are_valid_constraintsNzWrong value for '%s': %s)rr)rÃr$) rprJr¨rr rlr·rºr»r¼r½rx) rqÚstrictÚmissingÚwarningsr_r rÄrTÚ controllerr`rVr)rlrÚcheckôs2         zLegacyMetadata.checkcCsn|jƒt|dƒ}i}xP|D]H}| s2||jkrt|}|dkrP||||<qdd„||Dƒ||<qW|S)aReturn 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). This is as per https://www.python.org/dev/peps/pep-0566/#id17. zMetadata-VersionÚ project_urlcSsg|]}dj|ƒ‘qS)r™)r¨)r\Úurrrrœ3sz)LegacyMetadata.todict..)rprCrkÚ _FIELD2ATTR)rqZ skip_missingrTÚdatar~rUrrrÚtodict s  zLegacyMetadata.todictcCs<|ddkr(xdD]}||kr||=qW|d|7<dS)NzMetadata-Versionz1.1r*r,r+z Requires-Dist)r*r,r+r)rqÚ requirementsr`rrrÚadd_requirements7s    zLegacyMetadata.add_requirementscCstt|dƒƒS)NzMetadata-Version)r³rC)rqrrrrDBszLegacyMetadata.keysccsx|jƒD] }|Vq WdS)N)rD)rqrUrrrÚ__iter__EszLegacyMetadata.__iter__cs‡fdd„ˆjƒDƒS)Ncsg|] }ˆ|‘qSrr)r\rU)rqrrrœJsz)LegacyMetadata.values..)rD)rqr)rqrr¡IszLegacyMetadata.valuescs‡fdd„ˆjƒDƒS)Ncsg|]}|ˆ|f‘qSrr)r\rU)rqrrrœMsz(LegacyMetadata.items..)rD)rqr)rqrrILszLegacyMetadata.itemscCsd|jj|j|jfS)Nz <%s %s %s>)Ú __class__rr]rB)rqrrrÚ__repr__Os zLegacyMetadata.__repr__)NNNrg)F)F)F)N)F)F)"rrrrrurprwryr{rr€r|r…rŒrŽr�r�r‘rmrnrvr¤rorzrÀrxrÉrÎrÐrDrÑr¡rIrÓrrrrrfìs>      ,  ,  rfz pydist.jsonz metadata.jsonÚMETADATAc@s¬eZdZdZejdƒZejdejƒZe Z ejdƒZ dZ de ZffdVdœZd Zd ZeffedWfe dXfe dYfd œZdZZd[dd„Zed\ƒZdefZdefZdefdefeeedefeeeedefd]d^dœ Z[[dd „Zd_d!d"„Zd#d$„Zed%d&„ƒZ ed'd(„ƒZ!e!j"d)d(„ƒZ!d`d*d+„Z#ed,d-„ƒZ$ed.d/„ƒZ%e%j"d0d/„ƒZ%d1d2„Z&d3d4„Z'd5d6„Z(d7d8„Z)dd9dd:dad=dd>d?d@dbdDdcdGdddIdJddedi Z*dLdM„Z+dfdPdQ„Z,dRdS„Z-dTdU„Z.dS)grzÊ 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)r]rBÚsummaryzqname 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)r‰r]rBrÖÚ_legacyÚ_datarlNrgcCs0|||gjdƒdkrtdƒ‚d|_d|_||_|dk rzy|j||ƒ||_Wn*tk rvt||d�|_|jƒYnXn²d}|r¢t |dƒ�}|j ƒ}WdQRXn |r®|j ƒ}|dkrÈ|j |j dœ|_ndt |tƒsÜ|jdƒ}ytj|ƒ|_|j|j|ƒWn0tk �r*tt|ƒ|d�|_|jƒYnXdS)Nrhz'path, fileobj and mapping are exclusive)rtrlÚrb)r‰Ú generatorzutf-8)rsrl)rirjr×rØrlÚ_validate_mappingrrfÚvalidater•rmÚMETADATA_VERSIONÚ GENERATORr²r ÚdecodeÚjsonÚloadsÚ ValueErrorr)rqrrrsrtrlrÍÚfrrrruƒs<       zMetadata.__init__r]rBÚlicenseÚkeywordsrÖz Requires-DistzSetup-Requires-DistzProvides-Extrar(ú Download-URLúMetadata-Version) Ú run_requiresÚbuild_requiresÚ dev_requiresZ test_requiresÚ meta_requiresÚextrasÚmodulesÚ namespacesÚexportsÚcommandsÚ classifiersÚ source_urlr‰c CsZtj|dƒ}tj|dƒ}||k�r||\}}|jr^|dkrP|dkrHdn|ƒ}n |jj|ƒ}n¼|dkrjdn|ƒ}|d krˆ|jj||ƒ}n’tƒ}|}|jjdƒ} | �r |dkrº| jd |ƒ}nR|dkrÞ| jd ƒ} | rÜ| j||ƒ}n.| jd ƒ} | �sú|jjd ƒ} | �r | j||ƒ}||k�rV|}n:||k�r4tj||ƒ}n"|j�rJ|jj|ƒ}n |jj|ƒ}|S) NÚ common_keysÚ mapped_keysrðrïrírîrñÚ extensionszpython.commandszpython.detailszpython.exports)rðrïrírîrñ)ÚobjectÚ__getattribute__r×rxrØ) rqrUÚcommonÚmappedÚlkÚmakerÚresultrVÚsentinelÚdrrrr÷ÇsF            zMetadata.__getattribute__cCsH||jkrD|j|\}}|p |j|krD|j|ƒ}|sDtd||fƒ‚dS)Nz.'%s' is an invalid value for the '%s' property)ÚSYNTAX_VALIDATORSrlÚmatchr)rqrUrVrlÚpatternÚ exclusionsÚmrrrÚ_validate_valueòs  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|jd iƒ}|||<nh||krÖtj|||ƒnP|d k�rt|t ƒ�r|j ƒ}|�r|j ƒ}ng}|j�r||j|<n ||j|<dS)Nrórôrðrïrírîrñrõzpython.commandszpython.detailszpython.exportsrå)rðrïrírîrñ) rrör÷r×ÚNotImplementedErrorrØÚ setdefaultÚ __setattr__r²rr°r›)rqrUrVrørùrúrYrþrrrrüs>               zMetadata.__setattr__cCst|j|jdƒS)NT)rer]rB)rqrrrÚname_and_version#szMetadata.name_and_versioncCsF|jr|jd}n|jjdgƒ}d|j|jf}||krB|j|ƒ|S)Nz Provides-DistÚprovidesz%s (%s))r×rØrr]rBrJ)rqrüÚsrrrr 's  zMetadata.providescCs |jr||jd<n ||jd<dS)Nz Provides-Distr )r×rØ)rqrVrrrr 2s c Csâ|jr |}nÒg}t|pg|jƒ}xl|D]d}d|kr@d|kr@d}n8d|krNd}n|jdƒ|k}|rx|jdƒ}|rxt||ƒ}|r&|j|dƒq&WxNd D]F}d|} | |kr”|j| ƒ|jjd |gƒ}|j|j|||d �ƒq”W|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. ÚextraÚ environmentTÚrequiresÚbuildÚdevÚtestz:%s:z %s_requires)rìÚenv)rrr) r×r rìrxr ÚextendrKrØÚget_requirements) rqÚreqtsrìrrürþÚincluderFrUÚerrrr9s0       zMetadata.get_requirementscCs|jr|jƒS|jS)N)r×Ú _from_legacyrØ)rqrrrÚ dictionarycszMetadata.dictionarycCs|jr t‚nt|j|jƒSdS)N)r×rr rØÚDEPENDENCY_KEYS)rqrrrÚ dependenciesiszMetadata.dependenciescCs|jr t‚n |jj|ƒdS)N)r×rrØro)rqrVrrrrpsc CsŽ|jdƒ|jkrtƒ‚g}x0|jjƒD]"\}}||kr&||kr&|j|ƒq&W|rfddj|ƒ}t|ƒ‚x"|jƒD]\}}|j|||ƒqpWdS)Nr‰zMissing metadata items: %sz, ) rxrÝrÚMANDATORY_KEYSrIrJr¨rr) rqrtrlrÆrUrr r®r¯rrrrÛwszMetadata._validate_mappingcCsB|jr.|jjdƒ\}}|s|r>tjd||ƒn|j|j|jƒdS)NTz#Metadata: missing: %s, warnings: %s)r×rÉrLr¹rÛrØrl)rqrÆrÇrrrrÜ…s  zMetadata.validatecCs(|jr|jjdƒSt|j|jƒ}|SdS)NT)r×rÎr rØÚ INDEX_KEYS)rqrürrrrÎŽs zMetadata.todictc CsÐ|jr|j st‚|j|jdœ}|jjdƒ}x2dD]*}||kr2|dkrLd }n|}||||<q2W|jd gƒ}|d gkrzg}||d <d}x2|D]*\}}||krŒ||rŒd||ig||<qŒW|j|d<i}i} |S)N)r‰rÚTr]rBrärÖÚ descriptionÚ classifierrñr"ÚråÚ requires_distrèÚsetup_requires_distrér r )r]rBrärÖrr©r rè©r!ré)r"r#)r×rØÚAssertionErrorrÝrÞrÎrxr ) rqrüZlmdr®ÚnkÚkwrDÚokÚauthorÚ maintainerrrrr•s0     zMetadata._from_legacyrrrõúpython.detailsr&r rr!úpython.projectÚ project_urlsÚHomez Home-pageÚcontactsrr$Úemailz Author-emailròrñc Csüdd„}|jr|j st‚tƒ}|j}x„|jjƒD]v\}}t|tƒsZ||kr¨||||<q2|}d}x8|D]0}y ||}Wqhtt fk r–d}PYqhXqhW|r2|||<q2W||j |j ƒ} ||j |j ƒ} |jràt|jƒ|d<t| ƒ|d<t| ƒ|d<|S)NcSs˜tƒ}xŒ|D]„}|jdƒ}|jdƒ}|d}xb|D]Z}| rN| rN|j|ƒq2d}|r^d|}|rx|rtd||f}n|}|jdj||fƒƒq2Wq W|S)Nr r r rz extra == "%s"z (%s) and %sr±)rzrxÚaddr¨)Úentriesrrr rZrlistr’rFrrrÚprocess_entriesÀs"      z,Metadata._to_legacy..process_entriesTFzProvides-Extraz Requires-DistzSetup-Requires-Dist)rØr×r$rfÚLEGACY_MAPPINGrIr²ršr}Ú IndexErrorrèrërérêrìÚsorted) rqr2rüZnmdr%r'rþÚfoundr®Zr1Zr2rrrÚ _to_legacy¿s2       zMetadata._to_legacyFTcCsÂ||gjdƒdkrtdƒ‚|jƒ|r`|jr4|j}n|jƒ}|rP|j||d�q¾|j||d�n^|jrp|jƒ}n|j}|r�t j ||dddd�n.t j |ddƒ�}t j ||dddd�WdQRXdS) Nrz)Exactly one of path and fileobj is needed)r¥Trh)Ú ensure_asciiÚindentÚ sort_keysr£zutf-8) rirârÜr×r7rvr¤rrØràÚdumpr”r•)rqrrrsrÕr¥Z legacy_mdrþrãrrrrvñs&    zMetadata.writecCsŒ|jr|jj|ƒnt|jjdgƒ}d}x"|D]}d|kr,d|kr,|}Pq,W|dkrhd|i}|jd|ƒn t|dƒt|ƒB}t|ƒ|d<dS)Nrèr r r r)r×rÐrØrÚinsertrzr5)rqrÏrèÚalwaysÚentryZrsetrrrrÐ s zMetadata.add_requirementscCs*|jpd}|jpd}d|jj|j||fS)Nz (no name)z no versionz<%s %s %s (%s)>)r]rBrÒrr‰)rqr]rBrrrrÓs  zMetadata.__repr__)rÕ)rÕ)rÕ)rÕ)r×rØrl)NNNrg)r]rBrärårÖ)ræN)rçN)N)NN)rõr*rä)rõr+r,r-)rõr+r.rr])rõr+r.rr/)rõr*rñ)NNFT)/rrrrÚreÚcompileZMETADATA_VERSION_MATCHERÚIZ NAME_MATCHERrZVERSION_MATCHERZSUMMARY_MATCHERrÝrrÞrrrrÿÚ __slots__rurzrór³Z none_listÚdictZ none_dictrôr÷rrÚpropertyrr ÚsetterrrrrÛrÜrÎrr3r7rvrÐrÓrrrrrYs€    ,+ '   *   2 ) 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)r:r,r+)r:)r2r/r1)r3)r)rr(r*r,r+r/r1r2r4r0r'r7r9r8)r0)r")r$r-r r!)F)GrÚ __future__rr”r/rràrµr?rrrÚcompatrrr rEr Úutilr r rBr rÚ getLoggerrrLrrrrÚ__all__rrr@r‹rŠr=r>rOr?rPrArRr@rQrzr�roZEXTRA_RErCrWr‚rIrÌr·rºr¼rƒržr„r¾rörÀrcrerfZMETADATA_FILENAMEZWHEEL_METADATA_FILENAMEZLEGACY_METADATA_FILENAMErrrrrÚ s²             I  j