diff options
| author | Kai Kang <kai.kang@windriver.com> | 2025-03-11 16:57:56 +0800 |
|---|---|---|
| committer | Khem Raj <raj.khem@gmail.com> | 2025-03-11 19:34:55 -0700 |
| commit | 5a2dcee4acba15dd7f871e277e838aa2531db14e (patch) | |
| tree | ad1dbc56ab75dc4580b0f07030e1123c5400ba33 /meta-python | |
| parent | 59b904920b49a0f583039e11ce1c5b190e116c07 (diff) | |
| download | meta-openembedded-5a2dcee4acba15dd7f871e277e838aa2531db14e.tar.gz | |
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 <kai.kang@windriver.com>
Signed-off-by: Khem Raj <raj.khem@gmail.com>
Diffstat (limited to 'meta-python')
2 files changed, 72 insertions, 0 deletions
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 @@ | |||
| 1 | From f753d4d6ad1f4846d14735beb3d1b157b9914b51 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Adam Williamson <awilliam@redhat.com> | ||
| 3 | Date: Wed, 2 Oct 2024 09:48:39 -0700 | ||
| 4 | Subject: [PATCH] options: adjust to behavior change in upstream | ||
| 5 | _parse_optional | ||
| 6 | |||
| 7 | In Python 3.13 and 3.12.7, the behavior of _parse_optional has | ||
| 8 | changed. It used to raise an error on multiple matching actions | ||
| 9 | itself, and only ever return None or an option tuple. Now the | ||
| 10 | "raise error on multiple matching actions" code was moved out | ||
| 11 | into consume_optional, and _parse_optional returns either None | ||
| 12 | or a *list* of option tuples, which contains more than one if | ||
| 13 | multiple actions match. See: | ||
| 14 | |||
| 15 | https://github.com/python/cpython/pull/124631 | ||
| 16 | https://github.com/python/cpython/issues/58573 | ||
| 17 | |||
| 18 | This adapts to the change in a way that should work on both older | ||
| 19 | and newer Pythons. | ||
| 20 | |||
| 21 | Signed-off-by: Adam Williamson <awilliam@redhat.com> | ||
| 22 | |||
| 23 | Upstream-Status: Backport [https://github.com/pykickstart/pykickstart/commit/f753d4d] | ||
| 24 | |||
| 25 | Signed-off-by: Kai Kang <kai.kang@windriver.com> | ||
| 26 | --- | ||
| 27 | pykickstart/options.py | 20 +++++++++++++++++--- | ||
| 28 | 1 file changed, 17 insertions(+), 3 deletions(-) | ||
| 29 | |||
| 30 | diff --git a/pykickstart/options.py b/pykickstart/options.py | ||
| 31 | index 2e3a0721..ca0e18af 100644 | ||
| 32 | --- a/pykickstart/options.py | ||
| 33 | +++ b/pykickstart/options.py | ||
| 34 | @@ -177,9 +177,23 @@ class KSOptionParser(ArgumentParser): | ||
| 35 | self.lineno = None | ||
| 36 | |||
| 37 | def _parse_optional(self, arg_string): | ||
| 38 | - option_tuple = ArgumentParser._parse_optional(self, arg_string) | ||
| 39 | + # Before 3.13 and 3.12.7, this returned None or a single | ||
| 40 | + # option tuple. From 3.13 / 3.12.7 onwards it returns None | ||
| 41 | + # or a *list* of option tuples | ||
| 42 | + option_tuple_or_tuples = ArgumentParser._parse_optional(self, arg_string) | ||
| 43 | + # all we want to do here is a custom warning if the action is | ||
| 44 | + # deprecated. we can only safely do this if there's exactly | ||
| 45 | + # one matching action | ||
| 46 | + if isinstance(option_tuple_or_tuples, list): | ||
| 47 | + if len(option_tuple_or_tuples) == 1: | ||
| 48 | + option_tuple = option_tuple_or_tuples[0] | ||
| 49 | + else: | ||
| 50 | + return option_tuple_or_tuples | ||
| 51 | + else: | ||
| 52 | + option_tuple = option_tuple_or_tuples | ||
| 53 | + | ||
| 54 | if option_tuple is None or option_tuple[0] is None: | ||
| 55 | - return option_tuple | ||
| 56 | + return option_tuple_or_tuples | ||
| 57 | |||
| 58 | action = option_tuple[0] | ||
| 59 | option = action.option_strings[0] | ||
| 60 | @@ -191,7 +205,7 @@ class KSOptionParser(ArgumentParser): | ||
| 61 | "kickstart. Please modify your kickstart file to remove this option.") | ||
| 62 | % {"lineno": self.lineno, "option": option}, KickstartDeprecationWarning) | ||
| 63 | |||
| 64 | - return option_tuple | ||
| 65 | + return option_tuple_or_tuples | ||
| 66 | |||
| 67 | def add_argument(self, *args, **kwargs): | ||
| 68 | if "introduced" in kwargs: | ||
| 69 | -- | ||
| 70 | 2.47.1 | ||
| 71 | |||
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 | |||
| 16 | file://0002-pykickstart-parser.py-add-lock-for-readKickstart-and.patch \ | 16 | file://0002-pykickstart-parser.py-add-lock-for-readKickstart-and.patch \ |
| 17 | file://0003-comment-out-sections-shutdown-and-environment-in-gen.patch \ | 17 | file://0003-comment-out-sections-shutdown-and-environment-in-gen.patch \ |
| 18 | file://0004-load.py-retry-to-invoke-request-with-timeout.patch \ | 18 | file://0004-load.py-retry-to-invoke-request-with-timeout.patch \ |
| 19 | file://0005-options-adjust-to-behavior-change-in-upstream-_parse.patch \ | ||
| 19 | " | 20 | " |
| 20 | SRCREV = "fa6c80c0e5c6bee29d089899a10d26e6f7f8afd8" | 21 | SRCREV = "fa6c80c0e5c6bee29d089899a10d26e6f7f8afd8" |
| 21 | 22 | ||
