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
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
Ë
AñúhÏgãó`—UdZddlmZddlZddlZddlZddlmZddlm    Z    m
Z
ddlm Z m Z ddl mZmZmZmZmZmZmZddlmZdd    lmZmZdd
lmZmZd d lmZd d l m!Z!d dl"m#Z#m$Z$d dl%m&Z&ddlm'Z'erddl(m)Z)ddl*m+Z+ddl,m-Z-e.e/e0e/effZ1de2d<    e.e/e1fZ3de2d<    eddd«Z4    d,                            d-d„Z5d.d„Z6        d/                                    d0d„Z7d1d„Z8                d2d„Z9    d3                            d4d „Z:d5d!„Z;Gd"„d#ee4«Z<Gd$„d%e<d«Z=Gd&„d'e<d«Z>Gd(„d)e&«Z?Gd*„d+e&«Z@y)6a<
Load setuptools configuration from ``setup.cfg`` files.
 
**API will be made private in the future**
 
To read project metadata, consider using
``build.util.project_wheel_metadata`` (https://pypi.org/project/build/).
For simple scenarios, you can also try parsing the file directly
with the help of ``configparser``.
é)Ú annotationsN)Ú defaultdict)ÚIterableÚIterator)ÚpartialÚwraps)Ú TYPE_CHECKINGÚAnyÚCallableÚClassVarÚGenericÚTypeVarÚcast)Údefault_environment)ÚInvalidRequirementÚ Requirement)ÚInvalidVersionÚVersioné)Ú_static)ÚStrPath)Ú    FileErrorÚ OptionError)ÚSetuptoolsDeprecationWarningé)Úexpand)Ú    TypeAlias©Ú Distribution)ÚDistributionMetadatarÚSingleCommandOptionsÚAllCommandOptionsÚTargetrr cóv—ddlm}|«}|r|j«ng}t||||«}t    |«S)a,Read given configuration file and returns options from it as a dict.
 
    :param str|unicode filepath: Path to configuration file
        to get options from.
 
    :param bool find_others: Whether to search for other configuration files
        which could be on in various places.
 
    :param bool ignore_option_errors: Whether to silently ignore
        options, values of which could not be resolved (e.g. due to exceptions
        in directives such as file:, attr:, etc.).
        If False exceptions are propagated as expected.
 
    :rtype: dict
    rr)Úsetuptools.distrÚfind_config_filesÚ_applyÚconfiguration_to_dict)ÚfilepathÚ find_othersÚignore_option_errorsrÚdistÚ    filenamesÚhandlerss       úMH:\Change_password\venv_build\Lib\site-packages\setuptools/config/setupcfg.pyÚread_configurationr02s<€õ$-á ‹>€DÙ,7×&Ñ&Ô(¸R€Iܐd˜H iÐ1EÓF€HÜ   Ó *Ð*ócó>—t||«|j«|S)z`Apply the configuration from a ``setup.cfg`` file into an existing
    distribution object.
    )r'Ú_finalize_requires)r,r)s  r/Úapply_configurationr4Ls€ô ˆ4ÔØ×ÑÔØ €Kr1cóD—ddlm}tjj    |«}tjj |«st d|›d«‚tj«}tjtjj|««g|¢|‘}    |j|ttt|«¬«t||j|¬«}|j!«tj|«|S#tj|«wxYw)zHRead configuration from ``filepath`` and applies to the ``dist`` object.r)Ú _DistributionzConfiguration file z does not exist.)r-)r+)r%r6ÚosÚpathÚabspathÚisfilerÚgetcwdÚchdirÚdirnameÚparse_config_filesrÚlistÚstrÚparse_configurationÚcommand_optionsÚ_finalize_license_files)r,r)Ú other_filesr+r6Úcurrent_directoryr-r.s        r/r'r'Us߀õ.äw‰w‰˜xÓ(€Hä 7‰7>‰>˜(Ô #ÜÐ-¨h¨ZÐ7GÐHÓIÐI䟠   ™    › Ð܇HHŒRW‰W_‰_˜XÓ &Ô'Ø(+Ð(˜xÐ(€Ið$à×(Ñ(¨¼¼dÄ3¹iÈÓ9SÐ(ÔTÜ&Ø $×&Ñ&Ð=Qô
ˆð     ×$Ñ$Ô&ä
‰Ð"Ô#à €Oøô     ‰Ð"Õ#ús Â!ADÄDcój—d|›}tjt||«}t|||«}|«S)z 
    Given a target object and option key, get that option from
    the target object, either through a get_{key} method or
    from an attribute directly.
    Úget_)Ú    functoolsrÚgetattr)Ú
target_objÚkeyÚ getter_nameÚ by_attributeÚgetters     r/Ú _get_optionrOts8€ð ˜˜,€KÜ×$Ñ$¤W¨j¸#Ó>€LÜ Z ¨lÓ ;€FÙ ‹8€Or1có¤—tt«}|D];}|jD]*}t|j|«}|||j
|<Œ,Œ=|S)z¿Returns configuration data gathered by given handlers as a dict.
 
    :param Iterable[ConfigHandler] handlers: Handlers list,
        usually from parse_configuration()
 
    :rtype: dict
    )rÚdictÚ set_optionsrOrJÚsection_prefix)r.Ú config_dictÚhandlerÚoptionÚvalues     r/r(r(€se€ô$¤DÓ)€Kàò@ˆØ×)Ñ)ò    @ˆFÜ × 2Ñ 2°FÓ;ˆEØ:?ˆK˜×.Ñ.Ñ /°Ò 7ñ    @ð@ð
Ðr1c    ó¶—tj|«5}t||||«}|j«|js|j|_t |j ||||j|j«}|j«|jj|j|j«ddd«||fS#1swYfSxYw)aÒPerforms additional parsing of configuration options
    for a distribution.
 
    Returns a list of used option handlers.
 
    :param Distribution distribution:
    :param dict command_options:
    :param bool ignore_option_errors: Whether to silently ignore
        options, values of which could not be resolved (e.g. due to exceptions
        in directives such as file:, attr:, etc.).
        If False exceptions are propagated as expected.
    :rtype: list
    N)
rÚEnsurePackagesDiscoveredÚConfigOptionsHandlerÚparseÚ package_dirÚConfigMetadataHandlerÚmetadataÚsrc_rootÚ_referenced_filesÚupdate)Ú distributionrBr+Úensure_discoveredÚoptionsÚmetas      r/rArA–sӀô$
×    (Ñ    (¨Ó    6ð
Ð:KÜ&Ø Ø Ø  Ø ó    
ˆð     ‰ ŒØ×'Ò'Ø'.×':Ñ':ˆLÔ $ä$Ø × !Ñ !Ø Ø  Ø Ø × $Ñ $Ø × !Ñ !ó 
ˆð     
‰
Œ Ø×&Ñ&×-Ñ-Ø × %Ñ % t×'=Ñ'=ô    
÷+
ð2 ˆ=Ð÷3
ð2 ˆ=Ðús –B*C à Ccól‡—d|vst‰«dk7ryt«j«}    t‰d«}|j|vrt
j |‰d¬«yy#t$rD}tˆfd„|D««r&t
j|‰d¬«}t|«|‚Yd}~yd}~wwxYw)amBecause users sometimes misinterpret this configuration:
 
    [options.extras_require]
    foo = bar;python_version<"4"
 
    It looks like one requirement with an environment marker
    but because there is no newline, it's parsed as two requirements
    with a semicolon as separator.
 
    Therefore, if:
        * input string does not contain a newline AND
        * parsed result contains two requirements AND
        * parsing of the two parts from the result ("<first>;<second>")
        leads in a valid Requirement with a valid marker
    a UserWarning is shown to inform the user about the possible problem.
    ú
rNr)ÚfieldÚreqc3óF•K—|]}‰dj|«–—Œy­w)rN©Ú
startswith)Ú.0ÚmarkerÚparseds  €r/ú    <genexpr>z8_warn_accidental_env_marker_misconfig.<locals>.<genexpr>ßs øèø€ÒB°ˆva‰y×#Ñ# F×+ÑBùsƒ!)
ÚlenÚ
marker_envÚkeysrÚnameÚ_AmbiguousMarkerÚemitrÚanyÚmessage)ÚlabelÚ
orig_valueroÚmarkersriÚexÚmsgs  `    r/Ú%_warn_accidental_env_marker_misconfigr~Äs°ø€ð" ˆzÑœS ›[¨AÒ-Øä‹l×ÑÓ!€Gð2ܘ& ™)Ó$ˆØ 8‰8wÑ Ü × !Ñ !¨°6¸!±9Ð !Õ =ð øä ò2Ü ÓB¸'ÔBÔ BÜ"×*Ñ*°¸FÀ1¹IÐ*ÓFˆCÜ$ SÓ)¨rÐ 1ô Cûð2ús®6A&Á&    B3Á/:B.Â.B3có—eZdZUdZded<    iZded<                                    dd„Ze                dd„«Ze    d„«Z
dd    „Z edd
„«Z ed „«Z ed „«Zed „«Zdd„Zdd„Zed„«Zed„«Zedd„«Zdd„Zdd„Zd„Zy)Ú ConfigHandlerz1Handles metadata supplied in configuration files.r@rSzClassVar[dict[str, str]]Úaliasescó¦—||_||_t|j|««|_g|_||_tt«|_    y©N)
r+rJrQÚ_section_optionsÚsectionsrRrcÚsetr@r`)ÚselfrJrdr+rcs     r/Ú__init__zConfigHandler.__init__ôsM€ð%9ˆÔ!Ø",ˆŒÜ˜T×2Ñ2°7Ó;Ó<ˆŒ Ø&(ˆÔØ!2ˆÔÜ!$¤S¡£ˆÔð     r1c#óªK—|j«D]<\}}|j|j«\}}}|rŒ(|jd«|f–—Œ>y­w)Nú.)ÚitemsÚ    partitionrSÚlstrip)ÚclsrdÚ    full_namerWÚpreÚ_seprts       r/r„zConfigHandler._section_optionssXèø€ð!(§ ¡ £ò    *Ñ ˆIuØ'×1Ñ1°#×2DÑ2DÓE‰OˆCtÙØØ—+‘+˜cÓ" EÐ)Ó )ñ        *ùs‚AAcóF—t|jj›d«‚)ú.Metadata item name to parser function mapping.z must provide .parsers property)ÚNotImplementedErrorÚ    __class__Ú__name__)r‡s r/ÚparserszConfigHandler.parserss'€ô"؏~‰~×&Ñ&Ð'Ð'FÐ Gó
ð    
r1cóÖ—|j}|jj||«}    t||«}|ry    |j j|d„«|«}tj|j|«}t|d|›|«}||«|jj|«y#t$r}t |«|‚d}~wwxYw#tf|jz$rYywxYw)Ncó—|Srƒ©)Úxs r/ú<lambda>z+ConfigHandler.__setitem__.<locals>.<lambda>&s€¸Q€r1Úset_)rJrÚgetrIÚAttributeErrorÚKeyErrorr—Ú    Exceptionr+rHrÚ __setattr__rRÚappend)    r‡Ú option_namerWrJÚ current_valueÚeroÚ simple_setterÚsetters             r/Ú __setitem__zConfigHandler.__setitem__sç€Ø—_‘_ˆ
ð—l‘l×&Ñ& {°KÓ@ˆ ð    /Ü# J° Ó<ˆMñ à ð    Ø?T—\‘\×%Ñ% k±;Ó?ÀÓFˆFô"×)Ñ)¨*×*@Ñ*@À+ÓNˆ ܘ t¨K¨=Ð%9¸=ÓIˆÙˆvŒà ×Ñ×Ñ  Õ,øô!ò    /ܘ;Ó'¨QÐ .ûð    /ûôˆ|˜d×7Ñ7Ñ7ò    Ù ð    ús(ª B1º#CÂ1    C Â: CÃC ÃC(Ã'C(cóڗt|t«r|Sd|vr|j«}n|j|«}|Dcgc]#}|j    «sŒ|j    «‘Œ%c}Scc}w)z×Represents value as a list.
 
        Value is split either by separator (defaults to comma) or by lines.
 
        :param value:
        :param separator: List items separator character.
        :rtype: list
        rg)Ú
isinstancer?Ú
splitlinesÚsplitÚstrip)rŽrWÚ    separatorÚchunks    r/Ú _parse_listzConfigHandler._parse_list0sX€ô eœTÔ "؈Là 5‰=Ø×$Ñ$Ó&‰Eà—K‘K     Ó*ˆEà+0ÖB %°E·K±KµM— ‘ • ÒBÐBùÒBs ½A(ÁA(có̗d}i}|j|«D]K}|j|«\}}}||k7rtd|›«‚|j«||j«<ŒM|S)zPRepresents value as a dict.
 
        :param value:
        :rtype: dict
        ú=z&Unable to parse option value to dict: )r±rŒrr®)rŽrWr¯ÚresultÚlinerKÚsepÚvals        r/Ú _parse_dictzConfigHandler._parse_dictDsr€ðˆ    ØˆØ—O‘O EÓ*ò    .ˆDØ ŸN™N¨9Ó5‰MˆCcؐiÒÜ!Ð$JÈ5È'Ð"RÓSÐSØ"%§)¡)£+ˆF3—9‘9“;Ò ð        .ð ˆ r1có*—|j«}|dvS)zQRepresents value as boolean.
 
        :param value:
        :rtype: bool
        )Ú1ÚtrueÚyes)Úlower©rŽrWs  r/Ú _parse_boolzConfigHandler._parse_boolUs€ð— ‘ “ ˆØÐ,Ð,Ð,r1có‡—ˆfd„}|S)zßReturns a parser function to make sure field inputs
        are not files.
 
        Parses a value after getting the key so error messages are
        more informative.
 
        :param key:
        :rtype: callable
        cór•—d}|j|«rtd‰›d«‚tj|«S)Núfile:z"Only strings are accepted for the z field, files are not accepted)rlÚ
ValueErrorrÚStr)rWÚexclude_directiverKs  €r/Úparserz3ConfigHandler._exclude_files_parser.<locals>.parserksGø€Ø 'Ð Ø×ÑР1Ô2Ü Ø8¸¸ð>-ð-óðô—;‘;˜uÓ%Ð %r1rš)rŽrKrÆs ` r/Ú_exclude_files_parserz#ConfigHandler._exclude_files_parser_sø€ô    &ðˆ r1có|—d}t|t«s|S|j|«stj|«S|t |«d}|j d«Dcgc]}|j«‘Œ}}|jj|«tjtj||««Scc}w)aORepresents value as a string, allowing including text
        from nearest files using `file:` directive.
 
        Directive is sandboxed and won't reach anything outside
        directory with setup.py.
 
        Examples:
            file: README.rst, CHANGELOG.md, src/file.txt
 
        :param str value:
        :rtype: str
        rÂNú,) r«r@rlrrÄrqr­r®r`rarÚ
read_files)r‡rWÚroot_dirÚinclude_directiveÚspecr8Ú    filepathss       r/Ú _parse_filezConfigHandler._parse_filevs €ð$Ðä˜%¤Ô%؈Là×ÑР1Ô2Ü—;‘;˜uÓ%Ð %à”SÐ*Ó+Ð-Ð.ˆØ.2¯j©j¸«oÖ> dT—Z‘Z•\Ð>ˆ    Ð>Ø ×Ñ×%Ñ% iÔ0ä{‰{œ6×,Ñ,¨Y¸ÓAÓBÐBùò?sÁB9cóî—d}|j|«stj|«S|j|d«}|j    |j
j «tj|||«S)z·Represents value as a module attribute.
 
        Examples:
            attr: package.attr
            attr: package.module.attr
 
        :param str value:
        :rtype: str
        zattr:Ú)    rlrrÄÚreplacerarcr\rÚ    read_attr)r‡rWr\rËÚattr_directiveÚ    attr_descs      r/Ú _parse_attrzConfigHandler._parse_attr‘sg€ð!ˆØ×Ñ Ô/Ü—;‘;˜uÓ%Ð %à—M‘M .°"Ó5ˆ    ð    ×ј4×1Ñ1×=Ñ=Ô>Ü×Ñ     ¨;¸ÓAÐAr1có‡—ˆfd„}|S)z¹Returns parser function to represents value as a list.
 
        Parses a value applying given methods one after another.
 
        :param parse_methods:
        :rtype: callable
        có*•—|}‰D]
}||«}Œ |Srƒrš)rWroÚmethodÚ parse_methodss   €r/r[z1ConfigHandler._get_parser_compound.<locals>.parse¯s'ø€ØˆFà'ò (Ù ›‘ð (ðˆMr1rš)rŽrÚr[s ` r/Ú_get_parser_compoundz"ConfigHandler._get_parser_compound¥sø€ô    ðˆ r1cóX—i}|j«D]\}\}}|||«||<Œ|S)aParses section options into a dictionary.
 
        Applies a given parser to each option in a section.
 
        :param dict section_options:
        :param callable values_parser: function with 2 args corresponding to key, value
        :rtype: dict
        )r‹)rŽÚsection_optionsÚ values_parserrWrKÚ_r·s       r/Ú_parse_section_to_dict_with_keyz-ConfigHandler._parse_section_to_dict_with_key¹s>€ðˆØ,×2Ñ2Ó4ò    1‰MˆC‘!SÙ& s¨CÓ0ˆE#ŠJð    1àˆ r1Ncó<‡—‰rˆfd„nd„}|j||«S)aParses section options into a dictionary.
 
        Optionally applies a given parser to each value.
 
        :param dict section_options:
        :param callable values_parser: function with 1 arg corresponding to option value
        :rtype: dict
        có•—‰|«Srƒrš)rßÚvrÞs  €r/rœz6ConfigHandler._parse_section_to_dict.<locals>.<lambda>Òs ø€™}¨QÓ/€r1có—|Srƒrš)rßrãs  r/rœz6ConfigHandler._parse_section_to_dict.<locals>.<lambda>Òs€ÐUV€r1)rà)rŽrÝrÞrÆs  ` r/Ú_parse_section_to_dictz$ConfigHandler._parse_section_to_dictÈs#ø€ñ5BÔ/ɈØ×2Ñ2°?ÀFÓKÐKr1có —|j«D]/\}\}}tjt«5|||<ddd«Œ1y#1swYŒ<xYw)zQParses configuration file section.
 
        :param dict section_options:
        N)r‹Ú
contextlibÚsuppressr )r‡rÝrtrßrWs     r/Ú parse_sectionzConfigHandler.parse_sectionÕsV€ð
!0× 5Ñ 5Ó 7ò    #Ñ ˆD‘*1eÜ×$Ñ$¤XÓ.ñ #à"T‘
÷ #ð #ñ    #÷ #ð #ús ³AÁA     cóæ—|jj«D]T\}}d}|rd|›}t|d|›jdd«d«}|€t    d|j
›d|›d«‚||«ŒVy)    zTParses configuration file items from one
        or more related sections.
 
        rÑrßrérŠÚ__Nz*Unsupported distribution option section: [ú])r…r‹rIrÒrrS)r‡Ú section_namerÝÚmethod_postfixÚsection_parser_methods     r/r[zConfigHandler.parseßsŸ€ð
.2¯]©]×-@Ñ-@Ó-Bò    3Ñ )ˆL˜/؈NÙØ#$ \ NÐ!3ä5<Øà Ð/Ð0×8Ñ8¸¸dÓCØó    6Ð !ð%Ð,Ü!ðØ×+Ñ+Ð,¨A¨l¨^¸1ð>óðñ
" /Õ 2ñ%    3r1c ó6‡‡‡—t‰«ˆˆˆfd„«}|S)z¢this function will wrap around parameters that are deprecated
 
        :param msg: deprecation message
        :param func: function to be wrapped around
        cóf•—‰jdd«tjd‰fi‰¤Ž‰|i|¤ŽS)NÚ
stacklevelrz Deprecated config in `setup.cfg`)Ú
setdefaultÚ_DeprecatedConfigrv)ÚargsÚkwargsÚfuncÚkwr}s  €€€r/Úconfig_handlerz@ConfigHandler._deprecated_config_handler.<locals>.config_handlerÿs7ø€à M‰M˜,¨Ô *Ü × "Ñ "Ð#EÀsÑ QÈbÒ QÙ˜Ð( Ñ(Ð (r1)r)r‡r÷r}rørùs ``` r/Ú_deprecated_config_handlerz(ConfigHandler._deprecated_config_handlerøs#ú€ô
ˆt‹õ    )ó
ð    )ð
Ðr1)rJr#rdr"rcúexpand.EnsurePackagesDiscoveredÚreturnÚNone)rdr"rüz*Iterator[tuple[str, SingleCommandOptions]]©rürý)rÉ)rËúStrPath | None)rËrrƒ)r–Ú
__module__Ú __qualname__Ú__doc__Ú__annotations__rrˆÚ classmethodr„Úpropertyr—r©r±r¸r¿rÇrÏrÖrÛràrårér[rúršr1r/r€r€äs5…Ù;àÓðð
)+€GÐ %Ó*ðð  àð ð#ð ð
;ð  ð
ó  ð"ð*Ø'ð*à    3ò*óð*ðñ
óð
ó -ð4òCóðCð&ñóðð ñ-óð-ðñóðó,Có6Bð(ñóðð&ñ óð ðò
Lóð
Ló#ó3ó2 r1r€c󂇗eZdZdZdddddœZdZ    dejf                                                    d ˆfd    „ Ze    d
„«Z
d „Z ˆxZ S) r]r^ÚurlÚ descriptionÚ classifiersÚ    platforms)Ú    home_pageÚsummaryÚ
classifierÚplatformFNcóF•—t‰|||||«||_||_yrƒ)Úsuperrˆr\rË)r‡rJrdr+rcr\rËr•s       €r/rˆzConfigMetadataHandler.__init__s)ø€ô    ‰Ñ˜ WÐ.BÐDUÔVØ&ˆÔØ ˆ r1cóV—|j|jtj«}|j|jtj
«}t |j|j¬«}|j}idtj“dtj“dtj“dtj“d|“d|“d|“d    |“d
|j||«“d |d «“d |“d |“d|“dtj“d|j“dtj“d|“S)r“©rËÚauthorÚ author_emailÚ
maintainerÚmaintainer_emailr
ÚkeywordsÚprovidesÚ    obsoletesr    ÚlicenseÚ license_filesrÚlong_descriptionÚlong_description_content_typeÚversionrÚ project_urls) rÛr±rÚListr¸ÚDictrrÏrËrÇrÄÚ_parse_version)r‡Úparse_list_staticÚparse_dict_staticÚ
parse_fileÚexclude_files_parsers     r/r—zConfigMetadataHandler.parsers%sj€ð!×5Ñ5°d×6FÑ6FÌÏ É ÓUÐØ ×5Ñ5°d×6FÑ6FÌÏ É ÓUÐܘT×-Ñ-¸¿ ¹ ÔFˆ
Ø#×9Ñ9Ðð
Ø ”g—k‘kð
à œGŸK™Kð
ð œ'Ÿ+™+ð
𠤧 ¡ ð    
ð
Ð*ð 
ð Ð)ð 
ð Ð)ð
ð Ð*ð
ð ˜4×4Ñ4°ZÐARÓSð
ð Ñ+¨IÓ6ð
ð Ð.ð
ð ˜:ð
ð  
ð
ð ,¬W¯[©[ð
ð t×*Ñ*ð
ð  ”7—;‘;ð!
ð" Ð-ð#
ð    
r1có:—|j||j«}||k7r|j«}    t|«|St j|j||j|j««S#t$r}t d|›d|›«|‚d}~wwxYw)zSParses `version` option value.
 
        :param value:
        :rtype: str
 
        zVersion loaded from z does not comply with PEP 440: N)
rÏrËr®rrrrrrÖr\)r‡rWrr¦s    r/r"z$ConfigMetadataHandler._parse_versionAs£€ð×"Ñ" 5¨$¯-©-Ó8ˆà eÒ Ø—m‘m“oˆGð ܘԠðˆNä~‰~˜d×.Ñ.¨u°d×6FÑ6FÈÏ É ÓVÓWÐWøô"ò Ü!Ø*¨5¨'ð2,Ø,3¨9ð6óððûð ús³ A:Á:    BÂBÂB)rJr rdr"r+Úboolrcrûr\z dict | NonerËrÿrürý) r–rrrSrÚ strict_moder7Úcurdirrˆrr—r"Ú __classcell__©r•s@r/r]r]s˜ø„Ø€NðØ Ø#Øñ    €Gð€Kðð$(Ø#%§9¡9ð !à(ð !ð#ð !ð#ð     !ð
;ð !ð !ð !ð!ð !ð
õ !ðñ
óð
ö6Xr1r]c󦇗eZdZdZ                                        dˆfd„ Zed„«Zd„Zdd„Ze    d„«Z
d„Z d„Z d    „Z dd
„Zd „Zdd „Zdd „Zdd„Zdd„ZˆxZS)rZrdcóZ•—t‰|||||«|j|_i|_yrƒ)rrˆr_rËr\)r‡rJrdr+rcr•s     €r/rˆzConfigOptionsHandler.__init__^s/ø€ô    ‰Ñ˜ WÐ.BÐDUÔVØ"×+Ñ+ˆŒ Ø+-ˆÕr1có(—|j|d¬«S)Nú;)r¯)r±r¾s  r/Ú_parse_list_semicolonz*ConfigOptionsHandler._parse_list_semicolonis€à‰˜u°ˆÓ4Ð4r1có<—|j||j¬«S)Nr)rÏrË)r‡rWs  r/Ú_parse_file_in_rootz(ConfigOptionsHandler._parse_file_in_rootms€Ø×Ñ °· ± ÐÓ>Ð>r1có”—|j|j|««}t|||«tjd„|D««S)Nc3óDK—|]}|jd«rŒ|–—Œy­w)ú#Nrk)rmrµs  r/rpz@ConfigOptionsHandler._parse_requirements_list.<locals>.<genexpr>vsèø€ÒP T¸4¿?¹?È3Õ;OœDÑPùs‚ ™ )r1r3r~rr )r‡ryrWros    r/Ú_parse_requirements_listz-ConfigOptionsHandler._parse_requirements_listps@€à×+Ñ+¨D×,DÑ,DÀUÓ,KÓLˆÜ-¨e°U¸FÔCô|‰|ÑP¨VÔPÓPÐPr1có —|j}|j}|j}|||j||||j    |d«t |j d«|j|j|j|tj|dœS)r“zeThe namespace_packages parameter is deprecated, consider using implicit namespaces instead (PEP 420).Úinstall_requires)Úzip_safeÚinclude_package_datar\ÚscriptsÚeager_resourcesÚdependency_linksÚnamespace_packagesr9Úsetup_requiresÚpackagesÚ entry_pointsÚ
py_modulesÚpython_requiresÚcmdclass) r±r¿Ú_parse_cmdclassr¸rúrr7r1Ú_parse_packagesr3rÚ SpecifierSet)r‡Ú
parse_listÚ
parse_boolÚparse_cmdclasss    r/r—zConfigOptionsHandler.parsersys¢€ð×%Ñ%ˆ
Ø×%Ñ%ˆ
Ø×-Ñ-ˆð#Ø$.Ø×+Ñ+Ø!Ø)Ø *Ø"&×"AÑ"AØðHó#ô !(Ø×-Ñ-Ð/Aó!ð#×8Ñ8Ø×,Ñ,Ø ×4Ñ4Ø$Ü&×3Ñ3Ø&ñ+
ð    
r1cóŽ—|jj}tj|j    |«||j
«Srƒ)rcr\rrEr¸rË)r‡rWr\s   r/rFz$ConfigOptionsHandler._parse_cmdclass˜s5€Ø×,Ñ,×8Ñ8ˆ ܏‰˜t×/Ñ/°Ó6¸ ÀTÇ]Á]ÓSÐSr1có0—ddg}|j«}||vr|j|«S|j|jj    di««}|j ||dk(|j |j¬«tjdi|¤ŽS)zTParses `packages` option value.
 
        :param value:
        :rtype: list
        zfind:zfind_namespace:z packages.findr)Ú
namespacesrËÚfill_package_dirrš)
r®r±Úparse_section_packages__findr…ržrarËr\rÚ find_packages)r‡rWÚfind_directivesÚ trimmed_valueÚ find_kwargss     r/rGz$ConfigOptionsHandler._parse_packagesœs¡€ð #Ð$5Ð6ˆØŸ ™ › ˆ à  Ñ /Ø×#Ñ# EÓ*Ð *ð×7Ñ7Ø M‰M× Ñ ˜o¨rÓ 2ó
ˆ ð    ×ÑØ%¨¸Ñ);Ñ;Ø—]‘]Ø!×-Ñ-ð    ô    
ô ×#Ñ#Ñ2 kÑ2Ð2r1cóޗ|j||j«}gd¢}|j«Dcic]\}}||vsŒ |sŒ||“Œ}}}|jd«}||d|d<|Scc}}w)zœParses `packages.find` configuration file section.
 
        To be used in conjunction with _parse_packages().
 
        :param dict section_options:
        )ÚwhereÚincludeÚexcluderVr)rår±r‹rž)r‡rÝÚ section_dataÚ
valid_keysÚkrãrTrVs        r/rPz1ConfigOptionsHandler.parse_section_packages__findµs|€ð×2Ñ2°?ÀD×DTÑDTÓUˆ â4ˆ
Ø(4×(:Ñ(:Ó(<×V¡  1ÀÀZÂÒTUq˜!‘tÐVˆ ÑVà—‘ Ó(ˆØ Ð Ø#(¨¡8ˆK˜Ñ  àÐùó Ws´ A)ÁA)ÁA)cóF—|j||j«}||d<y)z`Parses `entry_points` configuration file section.
 
        :param dict section_options:
        rBN)rår±©r‡rÝros   r/Úparse_section_entry_pointsz/ConfigOptionsHandler.parse_section_entry_pointsÇs&€ð
×,Ñ,¨_¸d×>NÑ>NÓOˆØ%ˆˆ^Òr1cód—|j||j«}tj|«Srƒ)rår±rÚcanonic_package_data)r‡rÝÚ package_datas   r/Ú_parse_package_dataz(ConfigOptionsHandler._parse_package_dataÏs+€Ø×2Ñ2°?ÀD×DTÑDTÓUˆ Ü×*Ñ*¨<Ó8Ð8r1có,—|j|«|d<y)z`Parses `package_data` configuration file section.
 
        :param dict section_options:
        raN©rb©r‡rÝs  r/Úparse_section_package_dataz/ConfigOptionsHandler.parse_section_package_dataÓs€ð
 $×7Ñ7¸ÓHˆˆ^Òr1có,—|j|«|d<y)zhParses `exclude_package_data` configuration file section.
 
        :param dict section_options:
        Úexclude_package_dataNrdres  r/Ú"parse_section_exclude_package_dataz7ConfigOptionsHandler.parse_section_exclude_package_dataÚs€ð
(,×'?Ñ'?ÀÓ'PˆÐ #Ò$r1có`‡—‰j|ˆfd„«}tj|«‰d<y)zbParses `extras_require` configuration file section.
 
        :param dict section_options:
        có0•—‰jd|›d|«S)Nzextras_require[rì)r7)r[rãr‡s  €r/rœzCConfigOptionsHandler.parse_section_extras_require.<locals>.<lambda>èsø€˜×6Ñ6¸ÈÈÈ1Ð7MÈqÓQ€r1Úextras_requireN)ràrr!r]s`  r/Úparse_section_extras_requirez1ConfigOptionsHandler.parse_section_extras_requireás1ø€ð
×5Ñ5Ø Û Qó
ˆô
")§¡¨fÓ!5ˆÐ Òr1có‚—|j||j«}tj||j«|d<y)z^Parses `data_files` configuration file section.
 
        :param dict section_options:
        Ú
data_filesN)rår±rÚcanonic_data_filesrËr]s   r/Úparse_section_data_filesz-ConfigOptionsHandler.parse_section_data_filesîs7€ð
×,Ñ,¨_¸d×>NÑ>NÓOˆÜ#×6Ñ6°v¸t¿}¹}ÓMˆˆ\Òr1)
rJrrdr"r+r(rcrûrürý)ryr@rWr@rþ)r–rrrSrˆrr1r3r7rr—rFrGrPr^rbrfrirmrqr+r,s@r/rZrZ[s¡ø„Ø€Nð    .à ð    .ð#ð    .ð#ð        .ð
;ð     .ð
õ     .ðñ5óð5ò?óQðñ
óð
ò<Tò3ò2ó$&ò9óIóQó
6÷Nr1rZcó(—eZdZdZdZdZed„«Zy)ruzAmbiguous requirement marker.zá
    One of the parsed requirements in `{field}` looks like a valid environment marker:
 
        {req!r}
 
    Please make sure that the configuration file is correct.
    You can use dangling lines to avoid this problem.
    z'userguide/declarative_config.html#opt-2c ór—d|j›}|j|j|j||¬«S)Nz%https://setuptools.pypa.io/en/latest/)Úsee_urlÚ format_args)Ú    _SEE_DOCSÚ_formatÚ_SUMMARYÚ_DETAILS)rŽrøÚdocss   r/rxz_AmbiguousMarker.messages2€à6°s·}±}°oÐFˆØ{‰{˜3Ÿ<™<¨¯©¸tÐQSˆ{ÓTÐTr1N)r–rrrxryrvrrxršr1r/ruru÷s+„Ø.€Hð€Hð:€IðñUóñUr1rucó—eZdZdZy)rôz!userguide/declarative_config.htmlN)r–rrrvršr1r/rôrô s„Ø3Ir1rô)FF)r)rr*r(r+r(rürQ)r,rr)rrür)ršF)
r,rr)rrDzIterable[StrPath]r+r(rüú2tuple[ConfigMetadataHandler, ConfigOptionsHandler])rJz#Distribution | DistributionMetadatarKr@)r.zKIterable[ConfigHandler[Distribution] | ConfigHandler[DistributionMetadata]]rürQ)F)rbrrBr"r+r(rür|)ryr@rzr@ror?)ArÚ
__future__rrçrHr7Ú collectionsrÚcollections.abcrrrrÚtypingr    r
r r r rrÚpackaging.markersrrrÚpackaging.requirementsrrÚpackaging.versionrrrÑrÚ_pathrÚerrorsrrÚwarningsrrÚtyping_extensionsrr%rÚdistutils.distr rQr@Útupler!rr"r#r0r4r'rOr(rAr~r€r]rZrurôršr1r/ú<module>rŠsµðò    õ#ãÛÛ    Ý#ß.ß$ßQ×QÑQå?ßBß5åÝß+Ý3ÝáÝ+å,å3à"& s¨E°#°s°(©OÐ';Ñ"<АiÓ<ðð
 $ CÐ)=Ð$=Ñ>А9Ó>ØÙ    ˜>Ð+AÓ    B€ðPUð+Øð+Ø$(ð+ØHLð+à    ó+ó4ð&(Ø!&ð    Ø
ðàðð#ððð    ð
8ó ó>    ðððð
ó    ð2"'ð+Øð+à&ð+ðð+ð8ó    +ó\2ô@aG˜F‘OôaôH    PX˜MÐ*@ÑAôPXôfYN˜=¨Ñ8ôYNôxUÐ3ôUô(4Ð4õ4r1