Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-cliff for openSUSE:Factory checked in at 2026-03-16 14:18:04 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-cliff (Old) and /work/SRC/openSUSE:Factory/.python-cliff.new.8177 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-cliff" Mon Mar 16 14:18:04 2026 rev:50 rq:1339302 version:4.13.2 Changes: -------- --- /work/SRC/openSUSE:Factory/python-cliff/python-cliff.changes 2026-01-22 15:19:34.963740820 +0100 +++ /work/SRC/openSUSE:Factory/.python-cliff.new.8177/python-cliff.changes 2026-03-16 14:21:20.435281840 +0100 @@ -1,0 +2,12 @@ +Mon Mar 16 09:31:19 UTC 2026 - Dirk Müller <[email protected]> + +- add cmd2-3.1.0-compat.patch + +------------------------------------------------------------------- +Mon Feb 23 09:28:14 UTC 2026 - Dirk Müller <[email protected]> + +- update to 4.13.2: + * Revert "Deprecate CommandManager namespace argument" + * Add typing classifier + +------------------------------------------------------------------- Old: ---- cliff-4.13.1.tar.gz New: ---- cliff-4.13.2.tar.gz cmd2-3.1.0-compat.patch ----------(New B)---------- New: - add cmd2-3.1.0-compat.patch ----------(New E)---------- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-cliff.spec ++++++ --- /var/tmp/diff_new_pack.SS2mRn/_old 2026-03-16 14:21:20.943302964 +0100 +++ /var/tmp/diff_new_pack.SS2mRn/_new 2026-03-16 14:21:20.947303130 +0100 @@ -18,12 +18,13 @@ %{?sle15_python_module_pythons} Name: python-cliff -Version: 4.13.1 +Version: 4.13.2 Release: 0 Summary: Command Line Interface Formulation Framework License: Apache-2.0 URL: https://docs.openstack.org/cliff/latest/ Source: https://files.pythonhosted.org/packages/source/c/cliff/cliff-%{version}.tar.gz +Patch1: cmd2-3.1.0-compat.patch BuildRequires: %{python_module pip} BuildRequires: %{python_module setuptools} BuildRequires: %{python_module wheel} ++++++ cliff-4.13.1.tar.gz -> cliff-4.13.2.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cliff-4.13.1/ChangeLog new/cliff-4.13.2/ChangeLog --- old/cliff-4.13.1/ChangeLog 2025-12-18 15:11:35.000000000 +0100 +++ new/cliff-4.13.2/ChangeLog 2026-02-17 15:45:10.000000000 +0100 @@ -1,6 +1,12 @@ CHANGES ======= +4.13.2 +------ + +* Revert "Deprecate CommandManager namespace argument" +* Add typing classifier + 4.13.1 ------ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cliff-4.13.1/PKG-INFO new/cliff-4.13.2/PKG-INFO --- old/cliff-4.13.1/PKG-INFO 2025-12-18 15:11:35.985460800 +0100 +++ new/cliff-4.13.2/PKG-INFO 2026-02-17 15:45:10.916530100 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 2.4 Name: cliff -Version: 4.13.1 +Version: 4.13.2 Summary: Command Line Interface Formulation Framework Author-email: OpenStack <[email protected]> License: Apache-2.0 @@ -17,6 +17,7 @@ Classifier: Programming Language :: Python :: 3.11 Classifier: Programming Language :: Python :: 3.12 Classifier: Programming Language :: Python :: 3.13 +Classifier: Typing :: Typed Requires-Python: >=3.10 Description-Content-Type: text/x-rst License-File: LICENSE diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cliff-4.13.1/cliff/commandmanager.py new/cliff-4.13.2/cliff/commandmanager.py --- old/cliff-4.13.1/cliff/commandmanager.py 2025-12-18 15:10:43.000000000 +0100 +++ new/cliff-4.13.2/cliff/commandmanager.py 2026-02-17 15:44:36.000000000 +0100 @@ -16,7 +16,6 @@ import importlib.metadata import logging from typing import TypeAlias -import warnings import stevedore @@ -68,10 +67,11 @@ class CommandManager: """Discovers commands and handles lookup based on argv data. - :param namespace: **DEPRECATED** String containing the entrypoint namespace - for the plugins to be loaded from by default. For example, - ``'cliff.formatter.list'``. :meth:`CommandManager.load_commands` should - be preferred. + :param namespace: String containing the entrypoint namespace for the + plugins to be loaded. For example, ``'cliff.formatter.list'``. + If provided, commands will be loaded from this namespace initially, + though it remains possible to load from additional namespaces with + :meth:`CommandManager.load_commands`. :param convert_underscores: Whether cliff should convert underscores to spaces in entry_point commands. :param ignored_modules: A list of module names to ignore when loading @@ -85,16 +85,6 @@ *, ignored_modules: collections.abc.Iterable[str] | None = None, ) -> None: - if namespace: - # TODO(stephenfin): Remove this functionality in 5.0.0 and make - # convert_underscores a kwarg-only argument - warnings.warn( - f'Initialising {self.__class__!r} with a namespace is ' - f'deprecated for removal. Prefer loading commands from a ' - f'given namespace with load_commands instead', - DeprecationWarning, - ) - self.namespace = namespace self.convert_underscores = convert_underscores self.ignored_modules = ignored_modules or () @@ -106,8 +96,6 @@ def _load_commands(self) -> None: # NOTE(jamielennox): kept for compatibility. - # TODO(stephenfin): We can remove this when we remove the 'namespace' - # argument if self.namespace: self.load_commands(self.namespace) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cliff-4.13.1/cliff.egg-info/PKG-INFO new/cliff-4.13.2/cliff.egg-info/PKG-INFO --- old/cliff-4.13.1/cliff.egg-info/PKG-INFO 2025-12-18 15:11:35.000000000 +0100 +++ new/cliff-4.13.2/cliff.egg-info/PKG-INFO 2026-02-17 15:45:10.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 2.4 Name: cliff -Version: 4.13.1 +Version: 4.13.2 Summary: Command Line Interface Formulation Framework Author-email: OpenStack <[email protected]> License: Apache-2.0 @@ -17,6 +17,7 @@ Classifier: Programming Language :: Python :: 3.11 Classifier: Programming Language :: Python :: 3.12 Classifier: Programming Language :: Python :: 3.13 +Classifier: Typing :: Typed Requires-Python: >=3.10 Description-Content-Type: text/x-rst License-File: LICENSE diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cliff-4.13.1/cliff.egg-info/SOURCES.txt new/cliff-4.13.2/cliff.egg-info/SOURCES.txt --- old/cliff-4.13.1/cliff.egg-info/SOURCES.txt 2025-12-18 15:11:35.000000000 +0100 +++ new/cliff-4.13.2/cliff.egg-info/SOURCES.txt 2026-02-17 15:45:10.000000000 +0100 @@ -102,4 +102,5 @@ releasenotes/notes/drop-python-39-bbeabc19b5143cd3.yaml releasenotes/notes/drop-python27-support-b16c9e5a9e2000ef.yaml releasenotes/notes/handle-none-values-when-sorting-de40e36c66ad95ca.yaml -releasenotes/notes/strip-period-from-help-strings-be368e5cf5bd5269.yaml \ No newline at end of file +releasenotes/notes/strip-period-from-help-strings-be368e5cf5bd5269.yaml +releasenotes/notes/undeprecate-commandmanager-namespace-argument-96d110bf3df0b9fd.yaml \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cliff-4.13.1/cliff.egg-info/pbr.json new/cliff-4.13.2/cliff.egg-info/pbr.json --- old/cliff-4.13.1/cliff.egg-info/pbr.json 2025-12-18 15:11:35.000000000 +0100 +++ new/cliff-4.13.2/cliff.egg-info/pbr.json 2026-02-17 15:45:10.000000000 +0100 @@ -1 +1 @@ -{"git_version": "2bf3144", "is_release": true} \ No newline at end of file +{"git_version": "0c1dbcb", "is_release": true} \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cliff-4.13.1/pyproject.toml new/cliff-4.13.2/pyproject.toml --- old/cliff-4.13.1/pyproject.toml 2025-12-18 15:10:43.000000000 +0100 +++ new/cliff-4.13.2/pyproject.toml 2026-02-17 15:44:36.000000000 +0100 @@ -13,17 +13,18 @@ dynamic = ["version", "dependencies"] requires-python = ">=3.10" classifiers = [ - "Development Status :: 5 - Production/Stable", - "Environment :: Console", - "Intended Audience :: Developers", - "License :: OSI Approved :: Apache Software License", - "Operating System :: POSIX :: Linux", - "Programming Language :: Python", - "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.10", - "Programming Language :: Python :: 3.11", - "Programming Language :: Python :: 3.12", - "Programming Language :: Python :: 3.13", + "Development Status :: 5 - Production/Stable", + "Environment :: Console", + "Intended Audience :: Developers", + "License :: OSI Approved :: Apache Software License", + "Operating System :: POSIX :: Linux", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Typing :: Typed", ] [project.urls] @@ -74,7 +75,7 @@ show_column_numbers = true show_error_context = true strict = true -exclude = '(?x)(doc | demoapp | releasenotes)' +exclude = "(?x)(doc | demoapp | releasenotes)" [[tool.mypy.overrides]] module = ["cliff.tests.*"] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cliff-4.13.1/releasenotes/notes/undeprecate-commandmanager-namespace-argument-96d110bf3df0b9fd.yaml new/cliff-4.13.2/releasenotes/notes/undeprecate-commandmanager-namespace-argument-96d110bf3df0b9fd.yaml --- old/cliff-4.13.1/releasenotes/notes/undeprecate-commandmanager-namespace-argument-96d110bf3df0b9fd.yaml 1970-01-01 01:00:00.000000000 +0100 +++ new/cliff-4.13.2/releasenotes/notes/undeprecate-commandmanager-namespace-argument-96d110bf3df0b9fd.yaml 2026-02-17 15:44:36.000000000 +0100 @@ -0,0 +1,9 @@ +--- +other: + - | + The ``namespace`` argument to ``cliff.commandmanager.CommandManager`` is + no longer deprecated for removal. Users should still prefer invoking + ``load_commands`` instead and the argument remains optional, but for + simpler use cases the following will continue to work:: + + cm = commandmanager.CommandManager('foo') ++++++ cmd2-3.1.0-compat.patch ++++++ >From 29fa87c0687063fdb3fd9c58e58c44aca7bce8a8 Mon Sep 17 00:00:00 2001 From: Stephen Finucane <[email protected]> Date: Tue, 3 Mar 2026 12:10:54 +0000 Subject: [PATCH] Fix compatibility with cmd2 3.1.0+ cmd2 3.1.0 has removed the dependency on the stdlib cmd library [1]. For our use cases, the largest change is that we no longer have the 'completenames' helper, which was defined in `cmd.Cmd` rather than `cmd2.Cmd`. However, upon further inspection is seems this helper was never actually used. It was not called directly in cmd2 2.x and was only used in cmd in two locations: `Cmd.complete` [2] and `Cmd.complete_help` [3]. cmd2 2.x entirely overrode the former [4] and deleted the latter, meaning we were not actually using any of that code. Therefore we can just delete the helper and any tests for same and suffer no ill effects. To be safe though, we bump our cmd2 minimum to 3.0.0. While here, we also need to fix some type hints to account for the cmd2 bump along with a related autopage bump. [1] https://github.com/python-cmd2/cmd2/releases/tag/3.1.0 [2] https://github.com/python/cpython/blob/v3.10.20/Lib/cmd.py#L274 [3] https://github.com/python/cpython/blob/v3.10.20/Lib/cmd.py#L287 [4] https://github.com/python-cmd2/cmd2/blob/2.7.0/cmd2/cmd2.py#L2192-L2294 [5] https://github.com/python-cmd2/cmd2/blob/2.7.0/cmd2/cmd2.py#L3770-L3772 Change-Id: I75933ec1ffc2dc8d57d4105c5683892ddbf50bff Signed-off-by: Stephen Finucane <[email protected]> --- cliff/formatters/table.py | 2 +- cliff/interactive.py | 16 +++------------- cliff/tests/base.py | 2 +- cliff/tests/test_commandmanager.py | 8 ++++++++ cliff/tests/test_interactive.py | 28 ---------------------------- requirements.txt | 2 +- 6 files changed, 14 insertions(+), 44 deletions(-) diff --git a/cliff/formatters/table.py b/cliff/formatters/table.py index 6546a76c..771130fc 100644 --- a/cliff/formatters/table.py +++ b/cliff/formatters/table.py @@ -51,7 +51,7 @@ def _do_fit(fit_width: bool) -> bool: class TableFormatter(base.ListFormatter, base.SingleFormatter): - ALIGNMENTS = { + ALIGNMENTS: dict[type[int | str | float], ty.Literal['l', 'c', 'r']] = { int: 'r', str: 'l', float: 'r', diff --git a/cliff/interactive.py b/cliff/interactive.py index 607d3f81..0f65abb5 100644 --- a/cliff/interactive.py +++ b/cliff/interactive.py @@ -73,7 +73,7 @@ class InteractiveApp(cmd2.Cmd): parts.insert(0, line.command) return parts - def default(self, line: str) -> bool | None: # type: ignore[override] + def default(self, line: str) -> bool | None: # Tie in the default command processor to # dispatch commands known to the command manager. # We send the message through our parent app, @@ -87,17 +87,7 @@ class InteractiveApp(cmd2.Cmd): return bool(ret) return None - def completenames(self, text: str, *ignored: ty.Any) -> list[str]: - """Tab-completion for command prefix without completer delimiter. - - This method returns cmd style and cliff style commands matching - provided command prefix (text). - """ - completions = cmd2.Cmd.completenames(self, text) - completions += self._complete_prefix(text) - return completions - - def completedefault( + def completedefault( # type: ignore[override] self, text: str, line: str, begidx: int, endidx: int ) -> list[str]: """Default tab-completion for command prefix with completer delimiter. @@ -146,7 +136,7 @@ class InteractiveApp(cmd2.Cmd): else: stdout = self.stdout try: - with autopage.argparse.help_pager(stdout) as paged_out: # type: ignore + with autopage.argparse.help_pager(stdout) as paged_out: self.stdout = paged_out cmd2.Cmd.do_help(self, arg) # type: ignore diff --git a/cliff/tests/base.py b/cliff/tests/base.py index cace1227..4e55fce1 100644 --- a/cliff/tests/base.py +++ b/cliff/tests/base.py @@ -11,7 +11,7 @@ # License for the specific language governing permissions and limitations # under the License. -import testtools # type: ignore +import testtools import fixtures diff --git a/cliff/tests/test_commandmanager.py b/cliff/tests/test_commandmanager.py index f17b5b70..53ff464d 100644 --- a/cliff/tests/test_commandmanager.py +++ b/cliff/tests/test_commandmanager.py @@ -30,6 +30,8 @@ class TestLookupAndFind(base.TestBase): ('three-words', {'argv': ['three', 'word', 'command']}), ] + argv: list[str] + def test(self): mgr = utils.TestCommandManager(utils.TEST_NAMESPACE) cmd, name, remaining = mgr.find_command(self.argv) @@ -45,6 +47,8 @@ class TestLookupWithRemainder(base.TestBase): ('three', {'argv': ['three', 'word', 'command', '--opt']}), ] + argv: list[str] + def test(self): mgr = utils.TestCommandManager(utils.TEST_NAMESPACE) cmd, name, remaining = mgr.find_command(self.argv) @@ -58,6 +62,8 @@ class TestFindInvalidCommand(base.TestBase): ('no-command-given', {'argv': ['-b']}), ] + argv: list[str] + def test(self): mgr = utils.TestCommandManager(utils.TEST_NAMESPACE) try: @@ -246,6 +252,8 @@ class TestLookupAndFindPartialName(base.TestBase): ('three-words', {'argv': ['t', 'w', 'c']}), ] + argv: list[str] + def test(self): mgr = utils.TestCommandManager(utils.TEST_NAMESPACE) cmd, name, remaining = mgr.find_command(self.argv) diff --git a/cliff/tests/test_interactive.py b/cliff/tests/test_interactive.py index 2936f073..55645bdb 100644 --- a/cliff/tests/test_interactive.py +++ b/cliff/tests/test_interactive.py @@ -11,7 +11,6 @@ # License for the specific language governing permissions and limitations # under the License. -import cmd2 from cliff import app from cliff.interactive import InteractiveApp @@ -32,33 +31,6 @@ class TestInteractive(base.TestBase): errexit=errexit, ) - def _test_completenames(self, expecteds, prefix): - app = self.make_interactive_app(False, 'hips', 'hippo', 'nonmatching') - self.assertEqual( - set(app.completenames(prefix, '', 0, 1)), set(expecteds) - ) - - def test_cmd2_completenames(self): - # cmd2.Cmd define do_help method - self._test_completenames(['help'], 'he') - - def test_cliff_completenames(self): - self._test_completenames(['hips', 'hippo'], 'hip') - - def test_no_completenames(self): - self._test_completenames([], 'taz') - - def test_both_completenames(self): - # cmd2.Cmd define do_history method - # NOTE(dtroyer): Before release 0.7.0 do_hi was also defined so we need - # to account for that in the list of possible responses. - # Remove this check after cmd2 0.7.0 is the minimum - # requirement. - if hasattr(cmd2.Cmd, "do_hi"): - self._test_completenames(['hi', 'history', 'hips', 'hippo'], 'hi') - else: - self._test_completenames(['history', 'hips', 'hippo'], 'hi') - def _test_completedefault(self, expecteds, line, begidx): command_names = set( ['show file', 'show folder', 'show long', 'list all'] diff --git a/requirements.txt b/requirements.txt index 94ac040d..bc95ac51 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ autopage>=0.4.0 # Apache 2.0 -cmd2>=1.0.0 # MIT +cmd2>=3.0.0 # MIT PrettyTable>=0.7.2 # BSD stevedore>=5.6.0 # Apache-2.0 PyYAML>=3.12 # MIT
