U vÆ_2˜ã@südZddlmZddlZddlmZddlZddlZddlZddl m Z m Z ddl m Z mZmZddlmZdd lmZmZdd lmZmZe e¡ZGd d „d e ƒZGd d„de ƒZGdd„de ƒZGdd„de ƒZdddgZdZ dZ!e "d¡Z#e "d¡Z$dZ%dZ&dZ'dZ(dZ)dZ*d Z+e*d!Z,d"Z-e.ƒZ/e/ 0e%¡e/ 0e&¡e/ 0e(¡e/ 0e*¡e/ 0e,¡e "d#¡Z1d$d%„Z2d&d'„Z3d(d)„e/DƒZ4d*d)„e4 5¡DƒZ6d+Z7d,Z8d-Z9d.Z:d/Z;d0ZƒZ?e "d2¡Z@dƒZBd8ZCd9ZDd:ZEGd;d„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-python38-pip-20.2.4-1.el7.x86_64/opt/alt/python38/lib/python3.8/site-packages/pip/_vendor/distlib/metadata.pyrsrc@seZdZdZdS)ÚMetadataConflictErrorz>Attempt to read or write metadata fields that are conflictual.Nrrrrrr src@seZdZdZdS)Ú MetadataUnrecognizedVersionErrorz Unknown metadata version number.Nrrrrrr$src@seZdZdZdS)ÚMetadataInvalidErrorzA metadata value is invalidNrrrrrr(srÚMetadataÚPKG_INFO_ENCODINGÚPKG_INFO_PREFERRED_VERSIONúutf-8ú1.1z \|ú ) úMetadata-VersionÚNameÚVersionÚPlatformÚSummaryÚ DescriptionÚKeywordsú Home-pageÚAuthorú Author-emailÚLicense)r r!r"r#úSupported-Platformr$r%r&r'r(r)r*Ú Classifierú Download-URLÚ ObsoletesÚProvidesÚRequires)r.r/r0r,r-)r r!r"r#r+r$r%r&r'r(r)Ú MaintainerúMaintainer-emailr*r,r-úObsoletes-Distú Project-URLú Provides-Distú Requires-DistúRequires-PythonúRequires-External)r5r6r7r3r8r1r2r4)r r!r"r#r+r$r%r&r'r(r)r1r2r*r,r-r3r4r5r6r7r8úPrivate-Versionú Obsoleted-ByúSetup-Requires-DistÚ ExtensionúProvides-Extra)r9r=r:r;r<)úDescription-Content-Typer0r/)r>z"extra\s*==\s*("([^"]+)"|'([^']+)')cCsL|dkr tS|dkrtS|dkr$tS|dkr4ttS|dkr@tSt|ƒ‚dS)Nú1.0rú1.2)ú1.3ú2.1ú2.0)Ú _241_FIELDSÚ _314_FIELDSÚ _345_FIELDSÚ _566_FIELDSÚ _426_FIELDSr)ÚversionrrrÚ_version2fieldlistpsrJc CsBdd„}g}| ¡D]"\}}|gddfkr,q| |¡qddddd d g}|D]ö}|tkrvd|krv| d¡t d |¡|tkrœd|krœ| d¡t d |¡|tkrÂd|krÂ| d¡t d |¡|tkrèd|krè| d¡t d|¡|tkrd |kr|dkr| d ¡t d|¡|t krLd |krL| d ¡t d|¡qLt |ƒdkrZ|dSt |ƒdkr|t d|¡t dƒ‚d|koŽ||t ƒ}d|ko¢||t ƒ}d |ko¶||tƒ}d |koÊ||tƒ} t|ƒt|ƒt|ƒt| ƒdkrút dƒ‚|s |s |s | s t|kr tS|r*dS|r4dS|r>d Sd S)z5Detect the best version depending on the fields used.cSs|D]}||krdSqdS)NTFr)ÚkeysÚmarkersÚmarkerrrrÚ _has_marker€sz"_best_version.._has_markerÚUNKNOWNNr?rr@rArCrBzRemoved 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ÚappendrDÚremoveÚloggerÚdebugrErFrGrHÚlenrÚ _314_MARKERSÚ _345_MARKERSÚ _566_MARKERSÚ _426_MARKERSÚintr) ÚfieldsrNrKÚkeyÚvalueZpossible_versionsZis_1_1Zis_1_2Zis_2_1Zis_2_0rrrÚ _best_version~s`              & r^cCsi|]}| ¡ dd¡|“qS)ú-Ú_)ÚlowerÚreplace)Ú.0ÚnamerrrÚ ÇsrecCsi|]\}}||“qSrr)rcÚattrÚfieldrrrreÊs)r6r3r5)r7)r")r#r,r.r0r/r3r5r6r8r4r+r;r=r<)r4)r&)r(r1r$r%z[^A-Za-z0-9.]+FcCs0|r$t d|¡}t d| dd¡¡}d||fS)zhReturn the distribution name with version. If for_filename is true, return a filename-escaped form.r_ú Ú.z%s-%s)Ú _FILESAFEÚsubrb)rdrIZ for_filenamerrrÚ_get_name_and_versionßs rlc@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|||g d¡dkrtdƒ‚i|_g|_d|_||_|dk rH| |¡n.|dk r\| |¡n|dk rv| |¡|  ¡dS)Néú'path, fileobj and mapping are exclusive) ÚcountÚ TypeErrorÚ_fieldsZrequires_filesZ _dependenciesÚschemeÚreadÚ read_fileÚupdateÚset_metadata_version)ÚselfÚpathÚfileobjÚmappingrtrrrÚ__init__øs   zLegacyMetadata.__init__cCst|jƒ|jd<dS©Nr )r^rs©ryrrrrxsz#LegacyMetadata.set_metadata_versioncCs| d||f¡dS)Nz%s: %s )Úwrite)ryr{rdr]rrrÚ _write_field szLegacyMetadata._write_fieldcCs | |¡S©N)Úget©ryrdrrrÚ __getitem__szLegacyMetadata.__getitem__cCs | ||¡Sr‚)Úset)ryrdr]rrrÚ __setitem__szLegacyMetadata.__setitem__cCs8| |¡}z |j|=Wntk r2t|ƒ‚YnXdSr‚)Ú _convert_namersÚKeyError)ryrdÚ field_namerrrÚ __delitem__s   zLegacyMetadata.__delitem__cCs||jkp| |¡|jkSr‚)rsrˆr„rrrÚ __contains__s ÿzLegacyMetadata.__contains__cCs(|tkr |S| dd¡ ¡}t ||¡S)Nr_r`)Ú _ALL_FIELDSrbraÚ _ATTR2FIELDrƒr„rrrrˆszLegacyMetadata._convert_namecCs|tks|tkrgSdS)NrO)Ú _LISTFIELDSÚ_ELEMENTSFIELDr„rrrÚ_default_value%szLegacyMetadata._default_valuecCs&|jdkrt d|¡St d|¡SdS)N©r?rÚ )Úmetadata_versionÚ_LINE_PREFIX_PRE_1_2rkÚ_LINE_PREFIX_1_2©ryr]rrrÚ_remove_line_prefix*s  z"LegacyMetadata._remove_line_prefixcCs|tkr||St|ƒ‚dSr‚)rŽÚAttributeErrorr„rrrÚ __getattr__0szLegacyMetadata.__getattr__FcCst|d|d|ƒS)zhReturn the distribution name with version. If filesafe is true, return a filename-escaped form.r!r")rl)ryZfilesaferrrÚ get_fullname;szLegacyMetadata.get_fullnamecCs| |¡}|tkS)z+return True if name is a valid metadata key)rˆrr„rrrÚis_fieldAs zLegacyMetadata.is_fieldcCs| |¡}|tkSr‚)rˆrr„rrrÚis_multi_fieldFs zLegacyMetadata.is_multi_fieldcCs.tj|ddd}z| |¡W5| ¡XdS)z*Read the metadata values from a file path.Úrr©ÚencodingN)ÚcodecsÚopenÚcloserv)ryÚfilepathÚfprrrruJszLegacyMetadata.readcCs¬t|ƒ}|d|jd<tD]p}||kr(q|tkrf| |¡}|tkrX|dk rXdd„|Dƒ}| ||¡q||}|dk r|dkr| ||¡q| ¡}|rœ|n|d|d<dS)z,Read the metadata values from a file object.zmetadata-versionr NcSsg|]}t| d¡ƒ‘qS©ú,)ÚtupleÚsplit©rcr]rrrÚ _sz,LegacyMetadata.read_file..rOr%)rrsrrÚget_allÚ_LISTTUPLEFIELDSr†Ú get_payload)ryZfileobÚmsgrgÚvaluesr]ÚbodyrrrrvRs zLegacyMetadata.read_filecCs0tj|ddd}z| ||¡W5| ¡XdS)z&Write the metadata fields to filepath.ÚwrrŸN)r¡r¢r£Ú write_file)ryr¤Ú skip_unknownr¥rrrr€nszLegacyMetadata.writecCsÄ| ¡t|dƒD]ª}| |¡}|r8|dgdgfkr8q|tkrV| ||d |¡¡q|tkr|dkrŠ|jdkr~| dd¡}n | dd¡}|g}|t kr¦d d „|Dƒ}|D]}| |||¡qªqd S) z0Write the PKG-INFO format data to a file object.r rOr§r%r’r“rz |cSsg|]}d |¡‘qSr¦©Újoinrªrrrr«Šsz-LegacyMetadata.write_file..N) rxrJrƒrrr¶rr”rbr­)ryÚ fileobjectr´rgr°r]rrrr³vs$   zLegacyMetadata.write_filec sv‡fdd„}|sn@t|dƒr:| ¡D]}||||ƒq$n|D]\}}|||ƒq>|rr| ¡D]\}}|||ƒq^dS)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ˆ ˆ |¡|¡dSr‚)rŽr†rˆ)r\r]rrrÚ_set™s z#LegacyMetadata.update.._setrKN)ÚhasattrrKrP)ryÚotherÚkwargsr¸ÚkÚvrrrrws     zLegacyMetadata.updatecCsh| |¡}|tks|dkrNt|ttfƒsNt|tƒrHdd„| d¡Dƒ}qzg}n,|tkrzt|ttfƒszt|tƒrv|g}ng}t  t j ¡r<|d}t |j ƒ}|tkrÚ|dk rÚ|D](}| | d¡d¡s®t d |||¡q®nb|tkr |dk r | |¡s.r§r!Nú;rz$'%s': '%s' is not valid (field '%s')z.'%s': '%s' is not a valid version (field '%s')r%)rˆrÚ isinstanceÚlistr¨rr©rrSÚ isEnabledForÚloggingÚWARNINGr rtÚ_PREDICATE_FIELDSÚis_valid_matcherÚwarningÚ_VERSIONS_FIELDSÚis_valid_constraint_listÚ_VERSION_FIELDSÚis_valid_versionÚ_UNICODEFIELDSr˜rs)ryrdr]Ú project_namertr½rrrr†«sV  ÿ  ÿ  þ ÿ ÿ   zLegacyMetadata.setcCsÊ| |¡}||jkr*|tkr&| |¡}|S|tkr@|j|}|S|tkrš|j|}|dkr^gSg}|D].}|tkr~| |¡qf| |d|df¡qf|S|tkrÀ|j|}t |t ƒrÀ|  d¡S|j|S)zGet a metadata field.Nrrr§) rˆrsÚ_MISSINGr‘rÌrr­rQrrÀrr©)ryrdrnr]ÚresÚvalrrrrƒ×s.         zLegacyMetadata.getc sú| ¡gg}}dD]}||kr| |¡q|rP|gkrPdd |¡}t|ƒ‚dD]}||krT| |¡qT|ddkr€||fSt|jƒ‰‡fdd„}t|ftˆjft ˆj ffD]@\}}|D]2} |  | d ¡} | d k r¼|| ƒs¼| d | | f¡q¼q°||fS) zkCheck if the metadata is compliant. If strict is True then raise if no Name or Version are provided)r!r"zmissing required metadata: %sú, )r'r(r r@cs(|D]}ˆ | d¡d¡sdSqdS)Nr¿rFT)rÆr©)r]r½©rtrrÚare_valid_constraintssz3LegacyMetadata.check..are_valid_constraintsNzWrong value for '%s': %s) rxrQr¶rr rtrÅrÈrÉrÊrËrƒ) ryÚstrictÚmissingÚwarningsrfr¯rÓr[Ú controllerrgr]rrÒrÚcheckôs8       ÿÿý  zLegacyMetadata.checkcCsh| ¡t|dƒ}i}|D]F}|r.||jkrt|}|dkrL||||<qdd„||Dƒ||<q|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. r Ú project_urlcSsg|]}d |¡‘qSr¦rµ)rcÚurrrr«3sz)LegacyMetadata.todict..)rxrJrsÚ _FIELD2ATTR)ryZ skip_missingr[ÚdatarŠr\rrrÚtodict s zLegacyMetadata.todictcCs8|ddkr$dD]}||kr||=q|d|7<dS)Nr r)r.r0r/r6r)ryÚ requirementsrgrrrÚadd_requirements7s  zLegacyMetadata.add_requirementscCstt|dƒƒSr~)rÁrJrrrrrKBszLegacyMetadata.keysccs| ¡D] }|VqdSr‚©rK)ryr\rrrÚ__iter__Es zLegacyMetadata.__iter__cs‡fdd„ˆ ¡DƒS)Ncsg|] }ˆ|‘qSrr©rcr\rrrr«Jsz)LegacyMetadata.values..ràrrrrr°IszLegacyMetadata.valuescs‡fdd„ˆ ¡DƒS)Ncsg|]}|ˆ|f‘qSrrrârrrr«Msz(LegacyMetadata.items..ràrrrrrPLszLegacyMetadata.itemscCsd|jj|j|jfS)Nz <%s %s %s>)Ú __class__rrdrIrrrrÚ__repr__Os ÿzLegacyMetadata.__repr__)NNNrn)F)F)F)N)F)F)"rrrrr}rxrr…r‡r‹rŒrˆr‘r˜ršr›rœrrurvr€r³rwr†rÎrƒrØrÝrßrKrár°rPrärrrrrmìs@ ÿ     ,  ,  rmz pydist.jsonz metadata.jsonÚMETADATAc@sšeZdZdZe d¡Ze dej¡Ze Z e d¡Z dZ de Zdddd œZd Zd Zedfedfe dfe dfd œZd ZdHdd„ZedƒZdefZdefZdefdefeeedefeeeedefdddœ Z[[dd„ZdIdd„Zdd„Zed d!„ƒZ ed"d#„ƒZ!e!j"d$d#„ƒZ!dJd%d&„Z#ed'd(„ƒZ$ed)d*„ƒZ%e%j"d+d*„ƒZ%d,d-„Z&d.d/„Z'd0d1„Z(d2d3„Z)d4d5d6d7d8d9d:d;dd?„Z+dKdBdC„Z,dDdE„Z-dFdG„Z.dS)LrzÊ 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}rCz distlib (%s)r)Úlegacy)rdrIÚ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”rdrIrç)Ú_legacyÚ_datartNrnc Cs0|||g d¡dkrtdƒ‚d|_d|_||_|dk rzz| ||¡||_Wn*tk rvt||d|_| ¡YnXn²d}|r¢t |dƒ}|  ¡}W5QRXn |r®|  ¡}|dkrÈ|j |j dœ|_ndt |tƒsÜ| d¡}zt |¡|_| |j|¡Wn0tk r*tt|ƒ|d|_| ¡YnXdS)Nrorp)r|rtÚrb©r”Ú generatorr)r{rt)rqrrrèrértÚ_validate_mappingrrmÚvalidater¢ruÚMETADATA_VERSIONÚ GENERATORrÀr ÚdecodeÚjsonÚloadsÚ ValueErrorr)ryrzr{r|rtrÜÚfrrrr}ƒs@   þ    ÿzMetadata.__init__)rdrIÚlicenseÚkeywordsrçr6r;r=r,)r-N)r N) Ú run_requiresÚbuild_requiresÚ dev_requiresZ test_requiresÚ meta_requiresÚextrasÚmodulesÚ namespacesÚexportsÚcommandsÚ classifiersÚ source_urlr”c CsXt |d¡}t |d¡}||kr||\}}|jr^|dkrP|dkrHdn|ƒ}n |j |¡}nº|dkrjdn|ƒ}|dkrˆ|j ||¡}ntƒ}|}|j d¡} | r |dkrº|  d|¡}nP|dkrÞ|  d¡} | rÜ|  ||¡}n,|  d ¡} | sø|j d ¡} | r |  ||¡}||krT|}n:||kr2t ||¡}n"|jrH|j |¡}n |j |¡}|S) NÚ common_keysÚ mapped_keys©rrÿrýrþrÚ extensionsrúpython.commandsrúpython.detailsúpython.exports)ÚobjectÚ__getattribute__rèrƒré) ryr\ÚcommonÚmappedÚlkÚmakerÚresultr]ÚsentinelÚdrrrr ÇsD            zMetadata.__getattribute__cCsH||jkrD|j|\}}|p |j|krD| |¡}|sDtd||fƒ‚dS)Nz.'%s' is an invalid value for the '%s' property)ÚSYNTAX_VALIDATORSrtÚmatchr)ryr\r]rtÚpatternÚ exclusionsÚmrrrÚ_validate_valueòs  ÿÿzMetadata._validate_valuecCs*| ||¡t |d¡}t |d¡}||kr¾||\}}|jrV|dkrJt‚||j|<nf|dkrj||j|<nR|j di¡}|dkrŠ||d<n2|dkr¨| di¡}|||<n| d i¡}|||<nh||krÖt |||¡nP|d krt|t ƒr|  ¡}|r|  ¡}ng}|jr||j|<n ||j|<dS) Nrrrrrrrrr r÷) rr r rèÚNotImplementedErrorréÚ setdefaultÚ __setattr__rÀrr¾r©)ryr\r]r r rr`rrrrrüs<               zMetadata.__setattr__cCst|j|jdƒS©NT)rlrdrIrrrrÚname_and_version#szMetadata.name_and_versioncCsF|jr|jd}n|j dg¡}d|j|jf}||krB| |¡|S)Nr5Úprovidesz%s (%s))rèrérrdrIrQ)ryrÚsrrrr's  zMetadata.providescCs |jr||jd<n ||jd<dS)Nr5r)rèrér—rrrr2s c CsÚ|jr |}nÊg}t|pg|jƒ}|D]d}d|kr>d|kr>d}n8d|krLd}n| d¡|k}|rv| d¡}|rvt||ƒ}|r$| |d¡q$dD]F}d|} | |krŽ| | ¡|j d|g¡}| |j|||d¡qŽ|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) rèr rürƒr ÚextendrRréÚget_requirements) ryÚreqtsrür&rrÚincluderMr\Úerrrr(9s2     ÿ zMetadata.get_requirementscCs|jr| ¡S|jSr‚)rèÚ _from_legacyrérrrrÚ dictionarycszMetadata.dictionarycCs|jr t‚nt|j|jƒSdSr‚)rèrr réÚDEPENDENCY_KEYSrrrrÚ dependenciesiszMetadata.dependenciescCs|jr t‚n |j |¡dSr‚)rèrrérwr—rrrr/psc Cs†| d¡|jkrtƒ‚g}|j ¡D]"\}}||kr$||kr$| |¡q$|rbdd |¡}t|ƒ‚| ¡D]\}}| |||¡qjdS)Nr”zMissing metadata items: %srÑ) rƒrïrÚMANDATORY_KEYSrPrQr¶rr) ryr|rtrÕr\rr¯r¼r½rrrríws zMetadata._validate_mappingcCsB|jr.|j d¡\}}|s|r>t d||¡n| |j|j¡dS)NTz#Metadata: missing: %s, warnings: %s)rèrØrSrÇrírért)ryrÕrÖrrrrî…sÿzMetadata.validatecCs(|jr|j d¡St|j|jƒ}|SdSr)rèrÝr réÚ INDEX_KEYS)ryrrrrrÝŽs zMetadata.todictc CsÆ|jr |jrt‚|j|jdœ}|j d¡}dD]*}||kr.|dkrHd}n|}||||<q.| dg¡}|dgkrtg}||d<d }|D]*\}}||kr„||r„d ||ig||<q„|j|d <i}i} |S) NrëT)rdrIrörçÚ descriptionÚ classifierr3rr&Úr÷))Z requires_distrø)Zsetup_requires_distrùr"r)rèréÚAssertionErrorrïrðrÝrƒr) ryrZlmdr¼ÚnkÚkwrKÚokÚauthorÚ maintainerrrrr,•s.þ     zMetadata._from_legacyr!r"r*r$r%r'r(r)r-) rdrI)rrrörçr2)rúpython.projectÚ project_urlsZHome)rr;Úcontactsrrd)rr;r=rÚemailr)rrrc Csödd„}|jr|jrt‚tƒ}|j}|j ¡D]v\}}t|tƒsV||kr¤||||<q.|}d}|D]4}z ||}Wqbtt fk r”d}Yq˜YqbXqb|r.|||<q.||j |j ƒ} ||j |j ƒ} |jrÚt|jƒ|d<t| ƒ|d<t| ƒ|d<|S)NcSsŒtƒ}|D]|}| d¡}| d¡}|d}|D]V}|sF|sF| |¡q.d}|rVd|}|rp|rld||f}n|}| d ||f¡¡q.q |S)Nr r!r"r4z extra == "%s"z (%s) and %sr¿)r†rƒÚaddr¶)Úentriesr)r+r r&ZrlistržrMrrrÚprocess_entriesÀs"   z,Metadata._to_legacy..process_entriesTFr=r6r;)rérèr5rmÚLEGACY_MAPPINGrPrÀr¨r‰Ú IndexErrorrørûrùrúrüÚsorted) ryrArZnmdr6r8rÚfoundr¼Zr1Zr2rrrÚ _to_legacy¿s2     zMetadata._to_legacyFTc CsÂ||g d¡dkrtdƒ‚| ¡|r`|jr4|j}n| ¡}|rP|j||dq¾|j||dn^|jrp| ¡}n|j}|rt j ||ddddn.t   |dd¡}t j ||ddddW5QRXdS) Nrz)Exactly one of path and fileobj is needed)r´Tro)Ú ensure_asciiÚindentÚ sort_keysr²r) rqrôrîrèrFr€r³r,réròÚdumpr¡r¢)ryrzr{rær´Z legacy_mdrrõrrrr€ñs*  ÿ ÿzMetadata.writecCsŠ|jr|j |¡nr|j dg¡}d}|D]}d|kr*d|kr*|}qHq*|dkrfd|i}| d|¡n t|dƒt|ƒB}t|ƒ|d<dS)Nrør!r r"r)rèrßrérÚinsertr†rD)ryrÞrøÚalwaysÚentryZrsetrrrrß szMetadata.add_requirementscCs*|jpd}|jpd}d|jj|j||fS)Nz (no name)z no versionz<%s %s %s (%s)>)rdrIrãrr”)ryrdrIrrrräs  ÿzMetadata.__repr__)NNNrn)N)NN)NNFT)/rrrrÚreÚcompileZMETADATA_VERSION_MATCHERÚIZ NAME_MATCHERrZVERSION_MATCHERZSUMMARY_MATCHERrïrrðr0r1r.rÚ __slots__r}r†rrÁZ none_listÚdictZ none_dictrr rrÚpropertyrrÚsetterr(r-r/rírîrÝr,rBrFr€rßrärrrrrYs–  ýüÿ -ó+ '    *    ö 2 )F)GrÚ __future__rr¡r>rròrÃrNr4rrÚcompatrrr rLr Úutilr r rIr rÚ getLoggerrrSrrrrÚ__all__rrrOr–r•rDrErVrFrWrHrYrGrXr†rrwZEXTRA_RErJr^rŽrPrÛrÅrÈrÊrr­rrÌr rÎrjrlrmZMETADATA_FILENAMEZWHEEL_METADATA_FILENAMEZLEGACY_METADATA_FILENAMErrrrrÚsx              Iÿ  j