a0bic SrSSKrSSKrSSKrSSKJr SSKJr SSKJr SSKJ r J r J r J r J r JrJrJrJrJrJrJr SSKJrJr SS KJr SS KJrJr SS KJr SS K J!r!J"r" SS K#J$r$ SSK%J&r& \ (a SSK'J(r( SSK)J*r* \\+\RX4r-\ S\S\ 44r.\ S\.4r/\"S\SS9r0S8S\-S\14Sjjr2SSS\-SS4Sjr3S9SSS\-S\\-S\4S\S4 Sjjr5S \0S!\+4S"jr6S#\SS\14S$jr7S:S%SS&\/S\S'4S(jjr8S)\+S*\+S+\94S,jr:"S-S.\ \05r;"S/S0\;S15r<"S2S3\;S5r="S4S5\$5r>"S6S7\$5r?g);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)partialwraps) TYPE_CHECKINGCallableAnyDictGenericIterableListOptionalSetTupleTypeVarUnion) FileError OptionError)default_environment)InvalidRequirement Requirement) SpecifierSet)InvalidVersionVersion)SetuptoolsDeprecationWarning)expand)DistributionMetadata DistributionstrTarget)r!r)boundfilepathreturnc|SSKJn U"5nU(aUR5O/n[X@XR5n[ U5$)aRead 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_applyconfiguration_to_dict)r% find_othersignore_option_errorsr!dist filenameshandlerss ړ/builddir/build/BUILDROOT/alt-python313-setuptools-69.0.2-3.el8.x86_64/opt/alt/python313/lib/python3.13/site-packages/setuptools/config/setupcfg.pyread_configurationr28s7$- >D,7&&(RIdiFH  **r.r!c<[X5 UR5 U$)zXApply the configuration from a ``setup.cfg`` file into an existing distribution object. )r*_finalize_requires)r.r%s r1apply_configurationr6Rs 4 Kr3 other_filesr-) ConfigHandler.cSSKJn [RR U5n[RR U5(d[ SUS35e[R"5n[R"[RRU55 /UQUPnURXS9 [XRUS9nUR5 [R"U5 U$![R"U5 f=f)zHRead configuration from ``filepath`` and applies to the ``dist`` object.r) _DistributionzConfiguration file z does not exist.)r/)r-)r(r:ospathabspathisfilergetcwdchdirdirnameparse_config_filesparse_configurationcommand_options_finalize_license_files)r.r%r7r-r:current_directoryr/r0s r1r*r*[s.wwx(H 77>>( # #-hZ7GHII HHRWW__X &'(+(x(I$(((C& &&=Q  $$& "# O "#s (3C33D  target_objkeychSU3n[R"[X5n[XU5nU"5$)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_) functoolsrgetattr)rGrH getter_name by_attributegetters r1 _get_optionrPys4 ,K$$Wj>L Zl ;F 8Or3r0c[[5nUH=nURH*n[URU5nXAUR U'M, M? U$)zReturns configuration data gathered by given handlers as a dict. :param list[ConfigHandler] handlers: Handlers list, usually from parse_configuration() :rtype: dict )rdict set_optionsrPrGsection_prefix)r0 config_dicthandleroptionvalues r1r+r+sU$D)K))F 2 2F;E:?.. / 7* r3 distributionrD)ConfigMetadataHandlerConfigOptionsHandlerc [R"U5n[UUUU5nUR5 UR(dURUl[ UR UUUURUR5nUR5 URRURUR5 SSS5 XT4$!,(df  WW4$=f)aPerforms 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) rEnsurePackagesDiscoveredr[parse package_dirrZmetadatasrc_root_referenced_filesupdate)rYrDr-ensure_discoveredoptionsmetas r1rCrCs$  ( ( 6:K&       '''.':':L $$  ! !    $ $  ! !   &&--  % %t'='= + 72 =3 7 62 =s B/C C"label orig_valueparsedcx^SU;d[T5S:wag[5R5n[TS5nURU;a[ R UTSS9 gg![aGn[U4SjU55(a#[ RUTSS9n[U5UeSnAgSnAff=f)a=Because 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)fieldreqc3L># UHnTSRU5v M g7f)rN) startswith).0markerris r1 8_warn_accidental_env_marker_misconfig..s#B'vay##F++'s!$) len marker_envkeysrname_AmbiguousMarkeremitranymessage)rgrhrimarkersrmexmsgs ` r1%_warn_accidental_env_marker_misconfigrs" zS[A-l!G2&)$ 88w   ! !6!9 ! =  2 B'B B B"**F1I*FC$S)r 1 C2s5A(( B92=B44B9c>\rSrSr%Sr\\S'0r\\\4\S'S\ S\ S\ R4Sjr \S\ 4S j5r\S 5rS r\SS j5r\S 5r\S5r\S5rS\4SjrS\4Sjr\S5r\S5r\SSj5rSrSrSrSr g)r8z1Handles metadata supplied in configuration files.rTaliasesrGrerdcX0lXl[URU55Ul/UlX@l[5UlgN) r-rGrR_section_optionssectionsrSrdsetrb)selfrGrer-rds r1__init__ConfigHandler.__init__sC%9!$T227;< &(!2+.5 r3c## UR5HAup#URUR5upEnU(aM,URS5U4v MC g7f)N.)items partitionrTlstrip)clsre full_namerXpreseprws r1rConfigHandler._section_optionssL '  I&001C1CDNCd++c"E) ) !0sAAcF[SURR-5e).Metadata item name to parser function mapping.z!%s must provide .parsers property)NotImplementedError __class____name__)rs r1parsersConfigHandler.parserss#" /$..2I2I I  r3cURnURRX5n[X15nU(agUR RUS5"U5n[R"URU5n[USU-U5nU"U5 URRU5 g![a [ U5ef=f![4UR-a gf=f)NcU$r)xs r1+ConfigHandler.__setitem__..%sQr3zset_%s)rGrgetrLAttributeErrorKeyErrorr Exceptionr-rKr __setattr__rSappend)r option_namerXrG current_valueri simple_settersetters r1 __setitem__ConfigHandler.__setitem__s__ ll&&{@  (#JSnURU5(a[SRT55eU$)Nfile:zCOnly strings are accepted for the {0} field, files are not accepted)ro ValueErrorformat)rXexclude_directiverHs r1parser3ConfigHandler._exclude_files_parser..parserjs= '  122 --3VC[Lr3r)rrHrs ` r1_exclude_files_parser#ConfigHandler._exclude_files_parser^s  r3root_dircHSn[U[5(dU$URU5(dU$U[U5SnUR S5Vs/sHoUR 5PM nnUR RU5 [R"Xb5$s snf)aRepresents 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 rN,) rr"rortrrrbrcr read_files)rrXrinclude_directivespecr< filepathss r1 _parse_fileConfigHandler._parse_fileus$%%%L 122LS*+-..2jjo>odZZ\o > %%i0  55?sBcSnURU5(dU$URUS5nURURR5 [ R "XRU5$)zRepresents value as a module attribute. Examples: attr: package.attr attr: package.module.attr :param str value: :rtype: str zattr:)roreplacercrdr_r read_attr)rrXr_rattr_directive attr_descs r1 _parse_attrConfigHandler._parse_attrs^!//LMM."5  411==> AAr3c^U4SjnU$)zReturns parser function to represents value as a list. Parses a value applying given methods one after another. :param parse_methods: :rtype: callable c.>UnTH nU"U5nM U$rr)rXrimethod parse_methodss r1r^1ConfigHandler._get_parser_compound..parses"F'(Mr3r)rrr^s ` r1_get_parser_compound"ConfigHandler._get_parser_compounds  r3cV0nUR5HunupVU"XF5X4'M U$)zParses 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)rsection_options values_parserrXrH_rs r1_parse_section_to_dict_with_key-ConfigHandler._parse_section_to_dict_with_keys3,224MC!&s0EJ5 r3NcF^T(aU4SjOSnURX5$)zParses 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>T"U5$rr)rvrs r1r6ConfigHandler._parse_section_to_dict..s }Q/r3cU$rr)rrs r1rrsUVr3r)rrrrs ` r1_parse_section_to_dict$ConfigHandler._parse_section_to_dicts!5B/22?KKr3cUR5H/unup4[R"[5 X@U'SSS5 M1 g!,(df  MC=f)zAParses configuration file section. :param dict section_options: N)r contextlibsuppressr)rrrwrrXs r1 parse_sectionConfigHandler.parse_sectionsB !0 5 5 7 D*1$$X."T /.!8..s A A cURR5HZupSnU(aSU-n[USU-RSS5S5nUc[ SUR SUS35eU"U5 M\ g) zDParses configuration file items from one or more related sections. rz_%szparse_section%sr__Nz*Unsupported distribution option section: [])rrrLrrrT)r section_namermethod_postfixsection_parser_methods r1r^ConfigHandler.parses .2]]-@-@-B )LN!&!58?"^3< "/ 2%.Cr3c 8^^^[T5UUU4Sj5nU$)zthis function will wrap around parameters that are deprecated :param msg: deprecation message :param func: function to be wrapped around ch>TRSS5 [R"ST40TD6 T"U0UD6$)N stacklevelrz Deprecated config in `setup.cfg`) setdefault_DeprecatedConfigry)argskwargsfunckwr~s r1config_handler@ConfigHandler._deprecated_config_handler..config_handlers7 MM, *  " "#Es Qb Q(( (r3r)rr r~r r s ``` r1_deprecated_config_handler(ConfigHandler._deprecated_config_handlers# t )  ) r3)rbrdr-rrSrG)rr)!r __module__ __qualname____firstlineno____doc__r"__annotations__rr r#AllCommandOptionsrr]r classmethodrpropertyrrrrrr_Pathrrrrrrr^r__static_attributes__rr3r1r8r8s>; !GT#s(^    # "::  "*'8**  -4CC& --,6564BB(&   L L#32 r3r8c ^\rSrSrSrSSSSS.rSrS \R4S S S \ S \ S\ RS\ \S\4 U4Sjjjr\S5rSrSrU=r$)rZir`url description classifiers platforms) home_pagesummary classifierplatformFNrGrrer-rdr_rc>>[TU]XX45 XPlX`lgr)superrr_r)rrGrer-rdr_rrs r1rConfigMetadataHandler.__init__s  .BV& r3c URn[URURS9nURnUR nUUUUUR X!5U"S5UUUURUS. $)rrlicense) rkeywordsprovides obsoletesrr( license_filesrlong_descriptionversion project_urls)rrrrrrr_parse_version)r parse_list parse_file parse_dictexclude_files_parsers r1rConfigMetadataHandler.parsers#s%% T-- F %% #99$""#44ZL+I6'% ***&  r3c0URXR5nX!:waUR5n[U5 U$[ R"URXRUR55$![a [ SUSU35ef=f)z;Parses `version` option value. :param value: :rtype: str zVersion loaded from z does not comply with PEP 440: ) rrrrrrrr.rr_)rrXr.s r1r0$ConfigMetadataHandler._parse_version9s""5--8  mmoG  N~~d..u6F6F VWW" !*5'2,,396 s A99Br_r)rrrrrTr strict_moder;curdirrboolrr]rrRrrrrr0r __classcell__rs@r1rZrZsN # GK'+)) !* !# !# ! ":: ! d^ ! ! !  *XXr3rZrc^\rSrSrSrSSS\S\S\R4U4Sjjr \ S5r S r S \ S \ 4S jr\S 5rSrSrSrSrSrSrSrSrSrSrU=r$)r[iSrerGr!r-rdcV>[TU]XX45 URUl0Ulgr)r$rrarr_)rrGrer-rdrs r1rConfigOptionsHandler.__init__Vs* .BV"++ +-r3c"URUSS9$)N;)r)rrs r1_parse_list_semicolon*ConfigOptionsHandler._parse_list_semicolonasu44r3c4URXRS9$)Nr')rr)rrXs r1_parse_file_in_root(ConfigOptionsHandler._parse_file_in_rootes >>r3rgrXcURURU55n[XU5 UVs/sHoDRS5(aMUPM sn$s snf)N#)rCrFrro)rrgrXrirs r1_parse_requirements_list-ConfigOptionsHandler._parse_requirements_listhsJ++D,D,DU,KL-eFC"(Ds/CDDDs AAc&URnURnURnURnUUUUUUUR US5[ UR S5URURURURU[US.$)rzeThe namespace_packages parameter is deprecated, consider using implicit namespaces instead (PEP 420).install_requires)zip_safeinclude_package_datar_scriptseager_resourcesdependency_linksnamespace_packagesrMsetup_requires tests_requirepackages entry_points py_modulespython_requirescmdclass) rrr_parse_cmdclassrrrJrC_parse_packagesrFr)rr1 parse_boolr3parse_cmdclasss r1rConfigOptionsHandler.parsersps%% %% %% --#$.%!) *"&"A"AH# !(--/A!#88!77,, 44$+&-  r3cURRn[R"UR U5X R 5$r)rdr_rrZrr)rrXr_s r1r[$ConfigOptionsHandler._parse_cmdclasss3,,88 t//6 ]]SSr3c,SS/nUR5nX2;aURU5$URURR S055nUR X2S:HUR URS9 [R"S0UD6$)zN>NO%^r3cdURXR5n[R"U5$r)rrrcanonic_package_data)rr package_datas r1_parse_package_data(ConfigOptionsHandler._parse_package_datas)22?DTDTU **<88r3c,URU5US'g)zPParses `package_data` configuration file section. :param dict section_options: ryNrzrrs r1parse_section_package_data/ConfigOptionsHandler.parse_section_package_datas $77H^r3c,URU5US'g)zXParses `exclude_package_data` configuration file section. :param dict section_options: exclude_package_dataNr}r~s r1"parse_section_exclude_package_data7ConfigOptionsHandler.parse_section_exclude_package_datas (,'?'?'P #$r3c<^TRUU4Sj5nUTS'g)zRParses `extras_require` configuration file section. :param dict section_options: c0>TRSUS3U5$)Nzextras_require[r)rJ)rqrrs r1rCConfigOptionsHandler.parse_section_extras_require..s6617MqQr3extras_requireNrrts` r1parse_section_extras_require1ConfigOptionsHandler.parse_section_extras_requires( 55  Q  "( r3cURXR5n[R"X R5US'g)zNParses `data_files` configuration file section. :param dict section_options: data_filesN)rrrcanonic_data_filesrrts r1parse_section_data_files-ConfigOptionsHandler.parse_section_data_filess3 ,,_>N>NO#66v}}M\r3r8)rrrrrTrr;rr]rrrCrFr"rJrrr[r\rerurzrrrrrr<r=s@r1r[r[SsN ." .# .# . ":: .55?EcE#E  @T32*&9IQ (NNr3r[c0\rSrSrSrSrSr\S5rSr g)rxizAmbiguous 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 jSUR3nURURURX!S9$)Nz%https://setuptools.pypa.io/en/latest/)see_url format_args) _SEE_DOCS_format_SUMMARY_DETAILS)rr docss r1r{_AmbiguousMarker.messages/6s}}oF{{3<<t{TTr3rN) rrrrrrrrr{rrr3r1rxrxs+.HH:IUUr3rxc\rSrSrSrSrg)riz!userguide/declarative_config.htmlrN)rrrrrrrr3r1rrs3Ir3r)FF)rF)F)@rrrKr; collectionsrrrtypingrrr r r r r rrrrrerrorsrrextern.packaging.markersrruextern.packaging.requirementsrrextern.packaging.specifiersrextern.packaging.versionrrwarningsrrrdistutils.distrr(r!r"PathLikerSingleCommandOptionsrr#rRr2r6r;r*rPr+rCrrr8rZr[rxrrr3r1rs  #    ,HK6>33, c2;;E5#445  445 'M!N O>C++ +4n.$&!&  %    < F  E*>$?D*+ +&+ :; +\22#2t2@^GFO^B JXM*@AJXZ\N=8\N~U3U(444r3