From 5a2dcee4acba15dd7f871e277e838aa2531db14e Mon Sep 17 00:00:00 2001 From: Kai Kang Date: Tue, 11 Mar 2025 16:57:56 +0800 Subject: python3-pykickstart: fix options parse error Backport a patch for python3-pykickstart to fix option parse error: File "/usr/lib64/python3.12/site-packages/pykickstart/options.py", line 185, in _parse_optional option = action.option_strings[0] ^^^^^^^^^^^^^^^^^^^^^ AttributeError: 'tuple' object has no attribute 'option_strings' Signed-off-by: Kai Kang Signed-off-by: Khem Raj --- ...ust-to-behavior-change-in-upstream-_parse.patch | 71 ++++++++++++++++++++++ .../python-pykickstart/python3-pykickstart_3.48.bb | 1 + 2 files changed, 72 insertions(+) create mode 100644 meta-python/recipes-extended/python-pykickstart/files/0005-options-adjust-to-behavior-change-in-upstream-_parse.patch (limited to 'meta-python') diff --git a/meta-python/recipes-extended/python-pykickstart/files/0005-options-adjust-to-behavior-change-in-upstream-_parse.patch b/meta-python/recipes-extended/python-pykickstart/files/0005-options-adjust-to-behavior-change-in-upstream-_parse.patch new file mode 100644 index 0000000000..e2b34ab937 --- /dev/null +++ b/meta-python/recipes-extended/python-pykickstart/files/0005-options-adjust-to-behavior-change-in-upstream-_parse.patch @@ -0,0 +1,71 @@ +From f753d4d6ad1f4846d14735beb3d1b157b9914b51 Mon Sep 17 00:00:00 2001 +From: Adam Williamson +Date: Wed, 2 Oct 2024 09:48:39 -0700 +Subject: [PATCH] options: adjust to behavior change in upstream + _parse_optional + +In Python 3.13 and 3.12.7, the behavior of _parse_optional has +changed. It used to raise an error on multiple matching actions +itself, and only ever return None or an option tuple. Now the +"raise error on multiple matching actions" code was moved out +into consume_optional, and _parse_optional returns either None +or a *list* of option tuples, which contains more than one if +multiple actions match. See: + +https://github.com/python/cpython/pull/124631 +https://github.com/python/cpython/issues/58573 + +This adapts to the change in a way that should work on both older +and newer Pythons. + +Signed-off-by: Adam Williamson + +Upstream-Status: Backport [https://github.com/pykickstart/pykickstart/commit/f753d4d] + +Signed-off-by: Kai Kang +--- + pykickstart/options.py | 20 +++++++++++++++++--- + 1 file changed, 17 insertions(+), 3 deletions(-) + +diff --git a/pykickstart/options.py b/pykickstart/options.py +index 2e3a0721..ca0e18af 100644 +--- a/pykickstart/options.py ++++ b/pykickstart/options.py +@@ -177,9 +177,23 @@ class KSOptionParser(ArgumentParser): + self.lineno = None + + def _parse_optional(self, arg_string): +- option_tuple = ArgumentParser._parse_optional(self, arg_string) ++ # Before 3.13 and 3.12.7, this returned None or a single ++ # option tuple. From 3.13 / 3.12.7 onwards it returns None ++ # or a *list* of option tuples ++ option_tuple_or_tuples = ArgumentParser._parse_optional(self, arg_string) ++ # all we want to do here is a custom warning if the action is ++ # deprecated. we can only safely do this if there's exactly ++ # one matching action ++ if isinstance(option_tuple_or_tuples, list): ++ if len(option_tuple_or_tuples) == 1: ++ option_tuple = option_tuple_or_tuples[0] ++ else: ++ return option_tuple_or_tuples ++ else: ++ option_tuple = option_tuple_or_tuples ++ + if option_tuple is None or option_tuple[0] is None: +- return option_tuple ++ return option_tuple_or_tuples + + action = option_tuple[0] + option = action.option_strings[0] +@@ -191,7 +205,7 @@ class KSOptionParser(ArgumentParser): + "kickstart. Please modify your kickstart file to remove this option.") + % {"lineno": self.lineno, "option": option}, KickstartDeprecationWarning) + +- return option_tuple ++ return option_tuple_or_tuples + + def add_argument(self, *args, **kwargs): + if "introduced" in kwargs: +-- +2.47.1 + diff --git a/meta-python/recipes-extended/python-pykickstart/python3-pykickstart_3.48.bb b/meta-python/recipes-extended/python-pykickstart/python3-pykickstart_3.48.bb index 9e074bddcf..0013762f0a 100644 --- a/meta-python/recipes-extended/python-pykickstart/python3-pykickstart_3.48.bb +++ b/meta-python/recipes-extended/python-pykickstart/python3-pykickstart_3.48.bb @@ -16,6 +16,7 @@ SRC_URI = "git://github.com/rhinstaller/pykickstart.git;protocol=https;branch=ma file://0002-pykickstart-parser.py-add-lock-for-readKickstart-and.patch \ file://0003-comment-out-sections-shutdown-and-environment-in-gen.patch \ file://0004-load.py-retry-to-invoke-request-with-timeout.patch \ + file://0005-options-adjust-to-behavior-change-in-upstream-_parse.patch \ " SRCREV = "fa6c80c0e5c6bee29d089899a10d26e6f7f8afd8" -- cgit v1.2.3-54-g00ecf