zmc
2023-12-22 9fdbf60165db0400c2e8e6be2dc6e88138ac719a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
U
H=®d2˜ã@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<d1Z=e>ƒZ?e "d2¡Z@d<d4d5„ZAGd6d7„d7e>ƒ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úSD:\z\workplace\VsCode\pyvenv\venv\Lib\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|¡|tkrd
|kr|dkr| d
¡t d|¡|t    krLd    |krL| d    ¡t d|¡qLt
|ƒdkrZ|dSt
|ƒdkr|t d|¡t dƒ‚d|koŽ||t ƒ}d|ko¢||t ƒ}d
|ko¶||tƒ}d    |koÊ||tƒ}    t|ƒt|ƒt|ƒt|    ƒdkrút dƒ‚|s |s |s |    s t|kr 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.<locals>._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Ú
<dictcomp>Ç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ˆrr„rrrÚis_fieldAs
zLegacyMetadata.is_fieldcCs| |¡}|tkSr‚)rˆrr„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Ú
<listcomp>_sz,LegacyMetadata.read_file.<locals>.<listcomp>rOr%)rrsrrÚ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.<locals>.<listcomp>N)
rxrJrƒrrr¶rr”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.<locals>._setrKN)ÚhasattrrKrP)ryÚotherÚkwargsr¸ÚkÚvrrrrws
 
   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|tkr |dk    r | |¡s<t d
|||¡n0|tkr<|dk    r<| |¡s<t d
|||¡|tkrZ|d krZ| |¡}||j|<dS) z"Control then set a metadata field.r#cSsg|] }| ¡‘qSr)Ústrip)rcr½rrrr«²sz&LegacyMetadata.set.<locals>.<listcomp>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©rrSÚ 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Ìrr­rQrrÀ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.<locals>.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.<locals>.<listcomp>)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.<locals>.<listcomp>ràrrrrr°IszLegacyMetadata.valuescs‡fdd„ˆ ¡DƒS)Ncsg|]}|ˆ|f‘qSrrrârrrr«Msz(LegacyMetadata.items.<locals>.<listcomp>ràrrrrrPLszLegacyMetadata.itemscCsd|jj|j|jfS)Nz
<%s %s %s>)Ú    __class__rrdrIrrrrÚ__repr__Os ÿzLegacyMetadata.__repr__)NNNrn)F)F)F)N)F)F)"rrrrr}rxrr…r‡r‹rŒrˆr‘r˜ršr›rœrrurvr€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;d<dd=œ
Z*d>d?„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¡}||kr||\}}|jr^|dkrP|dkrHdn|ƒ}n |j |¡}nº|dkrjdn|ƒ}|dkrˆ|j ||¡}ntƒ}|}|j d¡}    |    r
|dkrº|     d|¡}nP|dkrÞ|     d¡}    |    rÜ|     ||¡}n,|     d    ¡}    |    sø|j d    ¡}    |    r
|     ||¡}||krT|}n:||kr2t ||¡}n"|jrH|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
krt|t    ƒr| 
¡}|r|  ¡}ng}|jr||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.<locals>.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||dq¾|j||dn^|jrp| ¡}n|j}|rt    j
||ddddn.t   |dd¡}t    j
||ddddW5QRXdS)    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†rrwZEXTRA_RErJr^rŽrPrÛrÅrÈrÊrr­rrÌr
rÎrjrlrmZMETADATA_FILENAMEZWHEEL_METADATA_FILENAMEZLEGACY_METADATA_FILENAMErrrrrÚ<module>sx   
 
 
 
 
 
 
 
 
 
 
Iÿ
 
j