From 856a4a0af9e5ca1211dd9a5fd7c77f473c95c58b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= Date: Thu, 14 Sep 2023 14:36:30 +0200 Subject: [PATCH] Second attempt to fix KeyError: 'console_scripts' The fix allows us to no longer skip the previously skipped tests. --- ...-Skip-tests-that-fail-on-Python-3.12.patch | 42 ------------ ...ompatibility-in-check_console_script.patch | 64 +++++++++++++++++++ python-argcomplete.spec | 18 ++++-- 3 files changed, 75 insertions(+), 49 deletions(-) delete mode 100644 0002-Skip-tests-that-fail-on-Python-3.12.patch create mode 100644 0004-Ensure-Python-3.12-compatibility-in-check_console_script.patch diff --git a/0002-Skip-tests-that-fail-on-Python-3.12.patch b/0002-Skip-tests-that-fail-on-Python-3.12.patch deleted file mode 100644 index 67941b9..0000000 --- a/0002-Skip-tests-that-fail-on-Python-3.12.patch +++ /dev/null @@ -1,42 +0,0 @@ -From 1c75d61d662126d861e3055db9f7619d5d374682 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= -Date: Wed, 28 Jun 2023 18:50:56 +0200 -Subject: [PATCH] Skip tests that fail on Python 3.12 - ---- - test/test.py | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/test/test.py b/test/test.py -index 75e281c..26808e1 100755 ---- a/test/test.py -+++ b/test/test.py -@@ -1288,21 +1288,25 @@ class TestBashGlobal(TestBash): - self.assertEqual(self.sh.run_command(command), 'arg\r\n') - - @unittest.skipIf(os.uname()[0] == "Darwin", "Skip test that fails on MacOS") -+ @unittest.skipIf(sys.version_info >= (3, 12), "Skip test that fails on Python 3.12") - def test_console_script_module(self): - """Test completing a console_script for a module.""" - self._test_console_script() - - @unittest.skipIf(os.uname()[0] == "Darwin", "Skip test that fails on MacOS") -+ @unittest.skipIf(sys.version_info >= (3, 12), "Skip test that fails on Python 3.12") - def test_console_script_package(self): - """Test completing a console_script for a package.""" - self._test_console_script(package=True) - - @unittest.skipIf(os.uname()[0] == "Darwin", "Skip test that fails on MacOS") -+ @unittest.skipIf(sys.version_info >= (3, 12), "Skip test that fails on Python 3.12") - def test_console_script_module_wheel(self): - """Test completing a console_script for a module from a wheel.""" - self._test_console_script(wheel=True) - - @unittest.skipIf(os.uname()[0] == "Darwin", "Skip test that fails on MacOS") -+ @unittest.skipIf(sys.version_info >= (3, 12), "Skip test that fails on Python 3.12") - def test_console_script_package_wheel(self): - """Test completing a console_script for a package from a wheel.""" - self._test_console_script(package=True, wheel=True) --- -2.40.1 - diff --git a/0004-Ensure-Python-3.12-compatibility-in-check_console_script.patch b/0004-Ensure-Python-3.12-compatibility-in-check_console_script.patch new file mode 100644 index 0000000..8272b61 --- /dev/null +++ b/0004-Ensure-Python-3.12-compatibility-in-check_console_script.patch @@ -0,0 +1,64 @@ +From d0fbcd20a24114fab5b6df71e86065b9a7c7576d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= +Date: Thu, 14 Sep 2023 14:20:27 +0200 +Subject: [PATCH] Ensure Python 3.12+ compatibility in check_console_script + +In f4d046c0cec1dab17f65853442b1da7d341e2915 an assumption was made +(correct at the time), that only the importlib.metadata backport, +`importlib_metadata`, returns a tuple of entry points. + +However, importlib.metadata in Python 3.12+ behaves the same. + +This caused a KeyError exception to be thrown on Python 3.12, +as reported repeatedly be testers of Fedora Linux 39 in: + +https://bugzilla.redhat.com/show_bug.cgi?id=2231593 + +This change adjusts the conditional used in check_console_script +to assume both the backport and Python 3.12+ return a tuple. + +While not obvious from the test failures output, +this change also fixes the following TestBashGlobal tests failures: + + - test_console_script_module + - test_console_script_module_wheel + - test_console_script_package + - test_console_script_package_wheel + +For the reference, the failures looked like this: + + FAIL: test_console_script_module (__main__.TestBashGlobal.test_console_script_module) + Test completing a console_script for a module. + ---------------------------------------------------------------------- + Traceback (most recent call last): + File ".../argcomplete/test/test.py", line 1376, in test_console_script_module + self._test_console_script() + File ".../argcomplete/test/test.py", line 1370, in _test_console_script + self.assertEqual(self.sh.run_command(command), "arg\r\n") + AssertionError: "usage: test-module [-h] {arg}\r\ntest-mo[66 chars]\r\n" != 'arg\r\n' + + arg + - usage: test-module [-h] {arg} + - test-module: error: argument arg: invalid choice: 'a' (choose from 'arg') + +Fixes https://github.com/kislyuk/argcomplete/issues/440 +--- + argcomplete/_check_console_script.py | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/argcomplete/_check_console_script.py b/argcomplete/_check_console_script.py +index 3f838e4..7bbe59a 100644 +--- a/argcomplete/_check_console_script.py ++++ b/argcomplete/_check_console_script.py +@@ -38,7 +38,8 @@ def main(): + + # The importlib_metadata backport returns a tuple of entry point objects + # whereas the official library returns a SelectableGroups object +- if not use_entry_points_backport: ++ # Python 3.12+ behaves like the importlib_metadata backport ++ if not use_entry_points_backport and sys.version_info < (3, 12): + entry_points = entry_points["console_scripts"] + + entry_points = [ep for ep in entry_points \ +-- +2.41.0 + diff --git a/python-argcomplete.spec b/python-argcomplete.spec index cf5934f..40cff65 100644 --- a/python-argcomplete.spec +++ b/python-argcomplete.spec @@ -8,7 +8,7 @@ Name: python-argcomplete Summary: Bash tab completion for argparse Version: 2.0.0 -Release: 11%{?dist} +Release: 12%{?dist} License: ASL 2.0 URL: https://github.com/kislyuk/argcomplete Source0: %pypi_source argcomplete @@ -17,16 +17,16 @@ Source0: %pypi_source argcomplete # this patch removes it Patch1: 0001-Remove-commit-hash-from-Fish-version.patch -# Some tests fail with Python 3.12 -# This has been reported upstream: https://github.com/kislyuk/argcomplete/issues/440 -# Upstream already skips those on MacOS, so we skip them as well -Patch2: 0002-Skip-tests-that-fail-on-Python-3.12.patch - # Ensure Python 3.7+ compatibility in check_console_script # Rebased from https://github.com/kislyuk/argcomplete/commit/f4d046c0ce -# Should fix https://bugzilla.redhat.com/2231593 +# Partial fix for https://bugzilla.redhat.com/2231593 Patch3: 0003-Ensure-Python-3.7-compatibility-in-check_console_script.patch +# Ensure Python 3.12+ compatibility in check_console_script +# Rebased from https://github.com/kislyuk/argcomplete/pull/448 +# A second part of the fix for https://bugzilla.redhat.com/2231593 +Patch4: 0004-Ensure-Python-3.12-compatibility-in-check_console_script.patch + BuildRequires: python3-devel BuildRequires: python3-setuptools @@ -101,6 +101,10 @@ export INPUTRC=$PWD/.inputrc %{_sysconfdir}/bash_completion.d/%{name} %changelog +* Thu Sep 14 2023 Miro Hrončok - 2.0.0-12 +- Second attempt to fix KeyError: 'console_scripts' +- Fixes: rhbz#2231593 + * Sun Aug 13 2023 Miro Hrončok - 2.0.0-11 - Fix KeyError: 'console_scripts' - Fixes: rhbz#2231593