Ë ÇM»ðùEÜ»ã óŠ—dZddlZddlZddlZddlmZddlmZddlmZddlm Z m Z m Z m Z m Z mZmZmZmZmZmZmZddlmZmZdd lmZdd lmZmZdd lmZdd l m!Z!m"Z"dd l#m$Z$ddl%m&Z&e r ddl'm(Z(ddl)m*Z*ee+ejXfZ-e dede ffZ. e de.fZ/eded¬«Z0 d8de-de1fd„Z2ddde-ddfd„Z3 d9ddde-dee-de4dedf d„Z5d e0d!e+fd"„Z6d#edde1fd$„Z7 d:d%dd&e/ded'fd(„Z8d)e+d*e+d+e9fd,„Z:Gd-„d.e e0«Z;Gd/„d0e;d1«Z<Gd2„d3e;d«Z=Gd4„d5e$«Z>Gd6„d7e$«Z?y);a< 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``. éN)Ú defaultdict)Úpartial©Úwraps) Ú TYPE_CHECKINGÚCallableÚAnyÚDictÚGenericÚIterableÚListÚOptionalÚSetÚTupleÚTypeVarÚUnioné)Ú FileErrorÚ OptionError)Údefault_environment)ÚInvalidRequirementÚ Requirement)Ú SpecifierSet)ÚInvalidVersionÚVersion)ÚSetuptoolsDeprecationWarningé)Úexpand)ÚDistributionMetadata©Ú DistributionÚstrÚTarget)r!r)ÚboundÚfilepathÚreturncó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)r%Ú find_othersÚignore_option_errorsr!ÚdistÚ filenamesÚhandlerss ú?/usr/lib/python3.12/site-packages/setuptools/config/setupcfg.pyÚread_configurationr29s<€õ$-á ‹>€DÙ,7�×&Ñ&Ô(¸R€IÜ�d˜H iÐ1EÓF€HÜ  Ó *Ð*ór.r!có>—t||«|j«|S)z`Apply the configuration from a ``setup.cfg`` file into an existing distribution object. )r*Ú_finalize_requires)r.r%s r1Úapply_configurationr6Ss€ô ˆ4�ÔØ×ÑÔØ €Kr3Ú other_filesr-)Ú ConfigHandler.có—ddlm}tjj |«}tjj |«st d|›d�«‚tj«}tjtjj|««g|¢|‘} |j||¬«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(r:ÚosÚpathÚabspathÚisfilerÚgetcwdÚchdirÚdirnameÚparse_config_filesÚparse_configurationÚcommand_optionsÚ_finalize_license_files)r.r%r7r-r:Úcurrent_directoryr/r0s r1r*r*\sÔ€õ.ä�w‰w�‰˜xÓ(€Hä �7‰7�>‰>˜(Ô #ÜÐ-¨h¨ZÐ7GÐHÓIÐIäŸ ™ › Ð܇H�HŒR�W‰W�_‰_˜XÓ &Ô'Ø(�+Ð(˜xÐ(€Ið$Ø×(Ñ(¨¸Ð(ÔCÜ&Ø �$×&Ñ&Ð=Qô ˆð ×$Ñ$Ô&ä �‰Ð"Ô#à €Oøô �‰Ð"Õ#ús Â!;C3Ã3D Ú target_objÚkeycó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)rGrHÚ getter_nameÚ by_attributeÚgetters r1Ú _get_optionrPzs8€ð ˜˜�,€KÜ×$Ñ$¤W¨j¸#Ó>€LÜ �Z ¨lÓ ;€FÙ ‹8€Or3r0có¤—tt«}|D];}|jD]*}t|j|«}|||j |<Œ,Œ=|S)z»Returns configuration data gathered by given handlers as a dict. :param list[ConfigHandler] handlers: Handlers list, usually from parse_configuration() :rtype: dict )rÚdictÚ set_optionsrPrGÚsection_prefix)r0Ú config_dictÚhandlerÚoptionÚvalues r1r+r+†sW€ô$¤DÓ)€KãˆØ×)Ô)ˆFÜ × 2Ñ 2°FÓ;ˆEØ:?ˆK˜×.Ñ.Ñ /°Ò 7ñ*ðð Ðr3Ú distributionrD)ÚConfigMetadataHandlerÚConfigOptionsHandlerc ó¶—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ÚEnsurePackagesDiscoveredr[ÚparseÚ package_dirrZÚmetadataÚsrc_rootÚ_referenced_filesÚupdate)rYrDr-Úensure_discoveredÚoptionsÚmetas r1rCrC˜s΀ô$ × (Ñ (¨Ô 6Ð:KÜ&Ø Ø Ø Ø ó  ˆð � ‰ ŒØ×'Ò'Ø'.×':Ñ':ˆLÔ $ä$Ø × !Ñ !Ø Ø Ø Ø × $Ñ $Ø × !Ñ !ó  ˆð � ‰ Œ Ø×&Ñ&×-Ñ-Ø × %Ñ % t×'=Ñ'=ô ÷+ 7ð2 �ˆ=Ð÷3 7ð2 �ˆ=Ðús –B*C à CÚlabelÚ orig_valueÚparsedcó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 (";") 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Úmarkerris €r1Ú z8_warn_accidental_env_marker_misconfig..ás!øèø€ÐB¹'°ˆv�a‰y×#Ñ# F×+¹'ùsƒ!) ÚlenÚ marker_envÚkeysrÚnameÚ_AmbiguousMarkerÚemitrÚanyÚmessage)rgrhriÚmarkersrmÚexÚmsgs ` r1Ú%_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ó*—eZdZUdZeed< iZeeefed< dede de jfd„Z e de fd„«Zed „«Zd „Ze dd „«Ze d „«Ze d „«Ze d„«Zdefd„Zdefd„Ze d„«Ze d„«Ze dd„«Zd„Zd„Zd„Zy)r8z1Handles metadata supplied in configuration files.rTÚaliasesrGrerdcó˜—||_||_t|j|««|_g|_||_t«|_y©N) r-rGrRÚ_section_optionsÚsectionsrSrdÚsetrb)ÚselfrGrer-rds r1Ú__init__zConfigHandler.__init__ösI€ð%9ˆÔ!Ø$ˆŒÜ˜T×2Ñ2°7Ó;Ó<ˆŒ Ø&(ˆÔØ!2ˆÔÜ+.«5ˆÔð r3c#óªK—|j«D]<\}}|j|j«\}}}|rŒ(|jd«|f–—Œ>y­w)NÚ.)ÚitemsÚ partitionrTÚlstrip)ÚclsreÚ full_namerXÚpreÚseprvs r1rƒzConfigHandler._section_optionssQèø€à '§ ¡ ¦Ñ ˆI�uØ&×0Ñ0°×1CÑ1CÓD‰NˆC��dÙØØ—+‘+˜cÓ" EÐ)Ó )ñ !0ùs‚AAcóF—td|jjz«‚)ú.Metadata item name to parser function mapping.z!%s must provide .parsers property)ÚNotImplementedErrorÚ __class__Ú__name__)r†s r1ÚparserszConfigHandler.parserss#€ô"Ø /°$·.±.×2IÑ2IÑ Ió ð r3cóÖ—|j}|jj||«} t||«}|ry |j j|d„«|«}tj|j|«}t|d|z|«}||«|jj|«y#t$r}t |«|‚d}~wwxYw#tf|jz$rYywxYw)Ncó—|Sr‚©)Úxs r1Úz+ConfigHandler.__setitem__..&s€¹Qr3zset_%s)rGr€ÚgetrLÚAttributeErrorÚKeyErrorr–Ú Exceptionr-rKrÚ __setattr__rSÚappend) r†Ú option_namerXrGÚ current_valueÚeriÚ simple_setterÚsetters r1Ú __setitem__zConfigHandler.__setitem__s倨—_‘_ˆ ð—l‘l×&Ñ& {°KÓ@ˆ ð /Ü# J° Ó<ˆMñ à ð Ø?�T—\‘\×%Ñ% k±;Ó?ÀÓFˆFô"×)Ñ)¨*×*@Ñ*@À+ÓNˆ ܘ X° Ñ%;¸]ÓKˆÙˆ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 rk)Ú isinstanceÚlistÚ splitlinesÚsplitÚstrip)r�rXÚ separatorÚchunks r1Ú _parse_listzConfigHandler._parse_list0s\€ô �eœTÔ "؈Là �5‰=Ø×$Ñ$Ó&‰Eà—K‘K  Ó*ˆEá+0ÓB©5 %°E·K±KµM�— ‘ • ¨5Ñ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�rXr®ÚresultÚlinerHr�Úvals r1Ú _parse_dictzConfigHandler._parse_dictDsm€ðˆ ؈ؗO‘O EÖ*ˆDØ ŸN™N¨9Ó5‰MˆC��cØ�iÒÜ!Ð$JÈ5È'Ð"RÓSÐSØ"%§)¡)£+ˆF�3—9‘9“;Ò ð +ð ˆ r3có*—|j«}|dvS)zQRepresents value as boolean. :param value: :rtype: bool )Ú1ÚtrueÚyes)Úlower©r�rXs r1Ú _parse_boolzConfigHandler._parse_boolUs€ð— ‘ “ ˆØÐ,Ð,Ð,r3có‡—ˆ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ób•—d}|j|«rtdj‰««‚|S)Núfile:zCOnly strings are accepted for the {0} field, files are not accepted)roÚ ValueErrorÚformat)rXÚexclude_directiverHs €r1Úparserz3ConfigHandler._exclude_files_parser..parserks:ø€Ø 'Ð Ø×ÑÐ 1Ô2Ü ð-ß-3©V°C«[óððˆLr3r™)r�rHrÄs ` r1Ú_exclude_files_parserz#ConfigHandler._exclude_files_parser_sø€ô ðˆ r3Úroot_dircó0—d}t|t«s|S|j|«s|S|t|«d}|j d«D�cgc]}|j «‘Œ}}|j j|«tj||«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"rorsr¬r­rbrcrÚ read_files)r†rXrÆÚinclude_directiveÚspecr<Ú filepathss r1Ú _parse_filezConfigHandler._parse_filevsŽ€ð$Ðä˜%¤Ô%؈Là×ÑÐ 1Ô2؈Là”SÐ*Ó+Ð-Ð.ˆØ.2¯j©j¸¬oÓ>©o d�T—Z‘Z•\¨oˆ Ð>Ø ×Ñ×%Ñ% iÔ0Ü× Ñ  ¨HÓ5Ð5ùò?sÁ BcóÈ—d}|j|«s|S|j|d«}|j|jj«t j |||«S)z·Represents value as a module attribute. Examples: attr: package.attr attr: package.module.attr :param str value: :rtype: str zattr:Ú)roÚreplacercrdr_rÚ read_attr)r†rXr_rÆÚattr_directiveÚ attr_descs r1Ú _parse_attrzConfigHandler._parse_attr�s]€ð!ˆØ×Ñ Ô/؈Là—M‘M .°"Ó5ˆ ð ×ј4×1Ñ1×=Ñ=Ô>Ü×Ñ  ¨;¸ÓAÐAr3có‡—ˆ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™)rXriÚmethodÚ parse_methodss €r1r^z1ConfigHandler._get_parser_compound..parse®s"ø€ØˆFã'�Ù ›‘ð(ðˆMr3r™)r�rØr^s ` r1Ú_get_parser_compoundz"ConfigHandler._get_parser_compound¤sø€ô ðˆ r3có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_parserrXrHÚ_rµs r1Ú_parse_section_to_dict_with_keyz-ConfigHandler._parse_section_to_dict_with_key¸s9€ðˆØ,×2Ñ2Ö4‰MˆC‘�!�SÙ& s¨CÓ0ˆE�#ŠJð5àˆ r3Ncó<‡—‰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 €r1r›z6ConfigHandler._parse_section_to_dict..Ñs ø€™}¨QÔ/r3có—|Sr‚r™)rÝrás r1r›z6ConfigHandler._parse_section_to_dict..Ñs€ÑUVr3©rÞ)r�rÛrÜrÄs ` r1Ú_parse_section_to_dictz$ConfigHandler._parse_section_to_dictÇs#ø€ñ5BÔ/ɈØ×2Ñ2°?ÀFÓKÐKr3có —|j«D]/\}\}}tjt«5|||<ddd«Œ1y#1swYŒóðñ " /Õ 2ñ%.Cr3c ó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Ú_DeprecatedConfigrx)ÚargsÚkwargsÚfuncÚkwr}s €€€r1Úconfig_handlerz@ConfigHandler._deprecated_config_handler..config_handlerþs7ø€à �M‰M˜,¨Ô *Ü × "Ñ "Ð#EÀsÑ QÈbÒ QÙ˜Ð( Ñ(Ð (r3r)r†rör}r÷røs ``` r1Ú_deprecated_config_handlerz(ConfigHandler._deprecated_config_handler÷s#ú€ô ˆt‹õ )ó ð )ð Ðr3)rÈr‚)r•Ú __module__Ú __qualname__Ú__doc__r"Ú__annotations__r€r r#ÚAllCommandOptionsrr]r‡Ú classmethodrƒÚpropertyr–r§r°r¶r½rÅÚ_PathrÍrÔrÙrÞrärèr^rùr™r3r1r8r8æs>…Ù;àÓðð !€GˆT�#�s�(‰^Ó ðð  àð ð#ð ð "×:Ñ:ó  ð"ð*Ð'8ò*óð*ðñ óð ò -ð4òCóðCð&ñóðð ñ-óð-ðñóðð,6¨5ó6ð4B¸óBð(ñóðð&ñ óð ðò Lóð Lò#ò3ó2 r3r8c 󚇗eZdZdZdddddœZdZ dejfd d d ed e d e jde e def ˆfd„ Zed„«Zd„ZˆxZS)rZr`ÚurlÚ descriptionÚ classifiersÚ platforms)Ú home_pageÚsummaryÚ classifierÚplatformFNrGrrer-rdr_rÆcóF•—t‰|�||||«||_||_yr‚)Úsuperr‡r_rÆ)r†rGrer-rdr_rÆr”s €r1r‡zConfigMetadataHandler.__init__s)ø€ô ‰Ñ˜ WÐ.BÐDUÔVØ&ˆÔØ ˆ� r3c óè—|j}t|j|j¬«}|j}|j }|||||j ||«|d«||||j|dœ S)r’©rÆÚlicense) rÚkeywordsÚprovidesÚ obsoletesrrÚ license_filesrÚlong_descriptionÚversionÚ project_urls)r°rrÍrÆr¶rÅrÙÚ_parse_version)r†Ú parse_listÚ parse_fileÚ parse_dictÚexclude_files_parsers r1r–zConfigMetadataHandler.parsers$s�€ð×%Ñ%ˆ ܘT×-Ñ-¸¿ ¹ ÔFˆ Ø×%Ñ%ˆ Ø#×9Ñ9Ðð$Ø"Ø"Ø#Ø×4Ñ4°ZÀÓLÙ+¨IÓ6Ø'Ø%Ø *Ø×*Ñ*Ø&ñ  ð r3có:—|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†rXrr¤s r1rz$ConfigMetadataHandler._parse_version:s£€ð×"Ñ" 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)r•rúrûrTr€Ú strict_moder;ÚcurdirrþÚboolrr]rrRrr‡rr–rÚ __classcell__©r”s@r1rZrZs˜ø„Ø€NðØ Ø#Øñ €Gð€Kðð'+ØŸ)™)ñ !à*ð !ð#ð !ð#ð !ð "×:Ñ:ð !ð ˜d‘^ð !ðõ !ðñ óð ö*Xr3rZrcó´‡—eZdZdZdddededejfˆfd„ Ze d„«Z d„Z d e d e fd „Z ed „«Zd „Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„ZˆxZS)r[rerGr!r-rdcóZ•—t‰|�||||«|j|_i|_yr‚)r r‡rarÆr_)r†rGrer-rdr”s €r1r‡zConfigOptionsHandler.__init__Ws/ø€ô ‰Ñ˜ WÐ.BÐDUÔVØ"×+Ñ+ˆŒ Ø+-ˆÕr3có(—|j|d¬«S)NÚ;)r®)r°r¼s r1Ú_parse_list_semicolonz*ConfigOptionsHandler._parse_list_semicolonbs€à�‰˜u°ˆÓ4Ð4r3có<—|j||j¬«S)Nr)rÍrÆ)r†rXs r1Ú_parse_file_in_rootz(ConfigOptionsHandler._parse_file_in_rootfs€Ø×Ñ °· ± ÐÓ>Ð>r3rgrXcóª—|j|j|««}t|||«|D�cgc]}|jd«rŒ|‘Œc}Scc}w)NÚ#)r&r(r~ro)r†rgrXrir´s r1Ú_parse_requirements_listz-ConfigOptionsHandler._parse_requirements_listisN€à×+Ñ+¨D×,DÑ,DÀUÓ,KÓLˆÜ-¨e°U¸FÔCñ"(ÓD¡˜¨t¯©¸sÕ/C’ ÑDÐDùÒDs ²AÁ Acó&—|j}|j}|j}|j}|||||||j |d«t |j d«|j|j|j|j|t|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_packagesr-Úsetup_requiresÚ tests_requireÚpackagesÚ entry_pointsÚ py_modulesÚpython_requiresÚcmdclass) r°r½r¶Ú_parse_cmdclassrùrr+r&Ú_parse_packagesr(r)r†rÚ parse_boolrÚparse_cmdclasss r1r–zConfigOptionsHandler.parsersqsª€ð×%Ñ%ˆ Ø×%Ñ%ˆ Ø×%Ñ%ˆ Ø×-Ñ-ˆð#Ø$.Ø%Ø!Ø)Ø *Ø"&×"AÑ"AØðHó#ô !(Ø×-Ñ-Ð/Aó!ð#×8Ñ8Ø!×7Ñ7Ø×,Ñ,Ø ×4Ñ4Ø$Ü+Ø&ñ- ð r3cóŽ—|jj}tj|j |«||j «Sr‚)rdr_rr:r¶rÆ)r†rXr_s r1r;z$ConfigOptionsHandler._parse_cmdclass’s5€Ø×,Ñ,×8Ñ8ˆ Ü�‰˜t×/Ñ/°Ó6¸ ÀTÇ]Á]ÓSÐSr3có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œrcrÆr_rÚ find_packages)r†rXÚfind_directivesÚ trimmed_valueÚ find_kwargss r1r<z$ConfigOptionsHandler._parse_packages–s¡€ð #Ð$5Ð6ˆØŸ ™ › ˆ à  Ñ /Ø×#Ñ# EÓ*Ð *ð×7Ñ7Ø �M‰M× Ñ ˜o¨rÓ 2ó ˆ ð ×ÑØ%¨¸Ñ);Ñ;Ø—]‘]Ø!×-Ñ-ð ô ô ×#Ñ#Ñ2 kÑ2Ð2r3cóô—|j||j«}gd¢}t|j«D��cgc]\}}||vsŒ |sŒ||f‘Œc}}«}|j d«}|�|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ÚexcluderIr)rär°rRrŠrœ)r†rÛÚ section_dataÚ valid_keysÚkrárGrIs r1rCz1ConfigOptionsHandler.parse_section_packages__find¯s‹€ð×2Ñ2°?ÀD×DTÑDTÓUˆ â4ˆ äØ+×1Ñ1Ô3ô Ù3‘t�q˜!°q¸J²Ê1ˆQ�ŠFÐ3ò ó ˆ ð—‘ Ó(ˆØ Ð Ø#(¨¡8ˆK˜Ñ àÐùó s¹ A4 ÁA4 Á A4 cóF—|j||j«}||d<y)z`Parses `entry_points` configuration file section. :param dict section_options: r7N)rär°©r†rÛris r1Úparse_section_entry_pointsz/ConfigOptionsHandler.parse_section_entry_pointsÄs&€ð ×,Ñ,¨_¸d×>NÑ>NÓOˆØ%ˆˆ^Òr3cód—|j||j«}tj|«Sr‚)rär°rÚcanonic_package_data)r†rÛÚ package_datas r1Ú_parse_package_dataz(ConfigOptionsHandler._parse_package_dataÌs+€Ø×2Ñ2°?ÀD×DTÑDTÓUˆ Ü×*Ñ*¨<Ó8Ð8r3có,—|j|«|d<y)z`Parses `package_data` configuration file section. :param dict section_options: rTN©rU©r†rÛs r1Úparse_section_package_dataz/ConfigOptionsHandler.parse_section_package_dataÐs€ð $×7Ñ7¸ÓHˆˆ^Òr3có,—|j|«|d<y)zhParses `exclude_package_data` configuration file section. :param dict section_options: Úexclude_package_dataNrWrXs r1Ú"parse_section_exclude_package_dataz7ConfigOptionsHandler.parse_section_exclude_package_data×s€ð (,×'?Ñ'?ÀÓ'PˆÐ #Ò$r3có:‡—‰j|ˆfd„«}|‰d<y)zbParses `extras_require` configuration file section. :param dict section_options: có0•—‰jd|›d�|«S)Nzextras_require[rë)r+)rNrár†s €r1r›zCConfigOptionsHandler.parse_section_extras_require..åsø€˜×6Ñ6¸ÈÈÈ1Ð7MÈqÔQr3Úextras_requireNrãrPs` r1Úparse_section_extras_requirez1ConfigOptionsHandler.parse_section_extras_requireÞs(ø€ð ×5Ñ5Ø Û Qó ˆð "(ˆÐ Òr3có‚—|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ÆrPs r1Úparse_section_data_filesz-ConfigOptionsHandler.parse_section_data_filesês7€ð ×,Ñ,¨_¸d×>NÑ>NÓOˆÜ#×6Ñ6°v¸t¿}¹}ÓMˆˆ\Òr3)r•rúrûrTrþrrr]r‡rÿr&r(r"r+rr–r;r<rCrQrUrYr\r`rdr r!s@r1r[r[Ts®ø„Ø€Nð .à"ð .ð#ð .ð#ð .ð "×:Ñ:õ .ðñ5óð5ò?ðE¨cðE¸#óEðñ óð ò@Tò3ò2ò*&ò9òIòQò (öNr3r[có(—eZdZdZdZdZed„«Zy)rwzAmbiguous 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 r1rzz_AmbiguousMarker.messages2€à6°s·}±}°oÐFˆØ�{‰{˜3Ÿ<™<¨¯©¸tÐQSˆ{ÓTÐTr3N)r•rúrûrkrlrirÿrzr™r3r1rwrwós+„Ø.€Hð€Hð:€IðñUóñUr3rwcó—eZdZdZy)róz!userguide/declarative_config.htmlN)r•rúrûrir™r3r1rórós„Ø3�Ir3ró)FF)r™F)F)@rürærKr;Ú collectionsrrrÚtypingrrr r r r r rrrrrÚerrorsrrÚextern.packaging.markersrrtÚextern.packaging.requirementsrrÚextern.packaging.specifiersrÚextern.packaging.versionrrÚwarningsrrÏrÚdistutils.distrr(r!r"ÚPathLikerÚSingleCommandOptionsrþr#rRr2r6rr*rPr+rCrªr~r8rZr[rwrór™r3r1Úrzsððñ óÛÛ Ý#ÝÝ÷ ÷ ÷ ó ÷,ÝHßKÝ6ß>Ý3ÝáÝ3å,à ˆc�2—;‘;ÐрؘE 5¨°¨Ñ#4Ð4Ñ5Ððð ˜Ð 4Ð4Ñ5ÐÙ � Ð'MÑ!NÔ O€ð>Cñ+Øð+à ó+ð4˜nð¸ðÀ.óð$&Ø!&ñ Ø ðàðð˜%‘ððð ð  Ð Ñ ó ð< ˜Fð ¨ó ð EÐ*>Ñ$?ðÀDóð*ñ+Ø ð+à&ð+ð Ð :Ñ;ó +ð\2°ð2À#ð2Ètó2ô@^�G˜F‘Oô^ôB JX˜MÐ*@ÑAôJXôZ\N˜=¨Ñ8ô\Nô~UÐ3ôUô(4Ð4õ4r3