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 2024-01-05 21:45:37 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-cliff (Old) and /work/SRC/openSUSE:Factory/.python-cliff.new.28375 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-cliff" Fri Jan 5 21:45:37 2024 rev:41 rq:1137085 version:4.4.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-cliff/python-cliff.changes 2022-05-14 22:52:39.031027520 +0200 +++ /work/SRC/openSUSE:Factory/.python-cliff.new.28375/python-cliff.changes 2024-01-05 21:47:00.634566202 +0100 @@ -2 +2 @@ -Sat May 14 12:26:14 UTC 2022 - [email protected] +Thu Jan 4 23:04:20 UTC 2024 - Dirk Müller <[email protected]> @@ -4,21 +4,36 @@ -- update to version 3.10.1 - - Removing modindex link from docs - - Automatically page interactive root help output - -------------------------------------------------------------------- -Fri May 13 22:33:11 UTC 2022 - Dirk Müller <[email protected]> - -- remove six dependency - -------------------------------------------------------------------- -Tue Oct 26 22:13:33 UTC 2021 - [email protected] - -- update to version 3.9.0 - - Add Python3 xena unit tests - - Replace getargspec with getfullargspec - - Handle SIGPIPE exit gracefully - - setup.cfg: Replace dashes with underscores - - Update unit test to satisfy python3.10+ - - Add conflict_handler parameter as attribut in Command class - - Use py3 as the default runtime for tox - - Colourise and automatically page help output +- update to 4.4.0: + * Handle complex objects in yaml formatter better + * Fix pre-commit issues + * Autofit table output if stdout is a tty + * Fix flake8 violation E721 + * Use upper-constraint in doc generation + * Removing helper functions providing Python < 3.3 + compatibility + * Strip trailing periods when getting description + * Clarification of the algorithm used + * columns: Useful \_\_str\_\_, \_\_repr\_\_ implementation + * Add Python3 antelope unit tests + * Removing brackets around tested conditional + * Replace abc.abstractproperty with property and + abc.abstractmethod + * Remove final use of pkg\_resources + * Defer loading PyYAML + * Defer loading cmd2 + * requirements: Remove explicit python-subunit dependency + * requirements: Remove explicit pbr dependency + * requirements: Remove explicit pyparsing dependency + * Update Python testing per Zed cycle testing runtime + * Migrate Python 3.6/7 jobs to Python 3.8 + * Removing modindex link from docs + * Add Python3 yoga unit tests + * Automatically page interactive root help output + * Colourise and automatically page help output + * Update unit test to satisfy python3.10+ + * Handle SIGPIPE exit gracefully + * Add conflict\_handler parameter as attribut in Command class + * setup.cfg: Replace dashes with underscores + * Replace getargspec with getfullargspec + * setup.cfg: Replace dashes with underscores + * Use py3 as the default runtime for tox + * Add Python3 xena unit tests +- switch to singlespec Old: ---- _service cliff-3.10.1.tar.gz New: ---- cliff-4.4.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-cliff.spec ++++++ --- /var/tmp/diff_new_pack.YkJavD/_old 2024-01-05 21:47:01.102583329 +0100 +++ /var/tmp/diff_new_pack.YkJavD/_new 2024-01-05 21:47:01.102583329 +0100 @@ -1,7 +1,7 @@ # # spec file for package python-cliff # -# Copyright (c) 2022 SUSE LLC +# Copyright (c) 2024 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,86 +17,61 @@ Name: python-cliff -Version: 3.10.1 +Version: 4.4.0 Release: 0 Summary: Command Line Interface Formulation Framework License: Apache-2.0 -Group: Development/Languages/Python -URL: https://docs.openstack.org/cliff -Source0: https://files.pythonhosted.org/packages/source/c/cliff/cliff-3.10.1.tar.gz -BuildRequires: openstack-macros -BuildRequires: python3-PrettyTable -BuildRequires: python3-PyYAML -BuildRequires: python3-autopage -BuildRequires: python3-cmd2 -BuildRequires: python3-docutils -BuildRequires: python3-fixtures -BuildRequires: python3-pbr -BuildRequires: python3-pytest -BuildRequires: python3-python-subunit -BuildRequires: python3-stevedore -BuildRequires: python3-testscenarios -BuildRequires: python3-testtools +URL: https://docs.openstack.org/cliff/latest/ +Source: https://files.pythonhosted.org/packages/source/c/cliff/cliff-%{version}.tar.gz +BuildRequires: %{python_module pip} +BuildRequires: %{python_module setuptools} +BuildRequires: %{python_module wheel} +BuildRequires: python-rpm-macros +# SECTION test requirements +BuildRequires: %{python_module autopage >= 0.4.0} +BuildRequires: %{python_module PrettyTable >= 0.7.2} +BuildRequires: %{python_module PyYAML >= 3.12} +BuildRequires: %{python_module Sphinx >= 2.0.0} +BuildRequires: %{python_module cmd2 >= 1.0.0} +BuildRequires: %{python_module coverage >= 4.0} +BuildRequires: %{python_module fixtures} +BuildRequires: %{python_module importlib_metadata >= 4.4} +BuildRequires: %{python_module pytest} +BuildRequires: %{python_module stevedore >= 2.0.1} +BuildRequires: %{python_module testscenarios >= 0.4} +BuildRequires: %{python_module testtools >= 2.2.0} +# /SECTION +BuildRequires: fdupes +Requires: python-PrettyTable >= 0.7.2 +Requires: python-PyYAML >= 3.12 +Requires: python-autopage >= 0.4.0 +Requires: python-cmd2 >= 1.0.0 +Requires: python-importlib_metadata >= 4.4 +Requires: python-stevedore >= 2.0.1 BuildArch: noarch +%python_subpackages %description -cliff is a framework for building command line programs. It uses -setuptools entry points to provide subcommands, output formatters, and -other extensions. - -%package -n python3-cliff -Summary: Command Line Interface Formulation Framework -Requires: python3-PrettyTable -Requires: python3-PyYAML -Requires: python3-autopage -Requires: python3-cmd2 -Requires: python3-pyparsing -Requires: python3-stevedore - -%description -n python3-cliff -cliff is a framework for building command line programs. It uses -setuptools entry points to provide subcommands, output formatters, and -other extensions. - -This package contains the Python 3.x module. - -%package -n python-cliff-doc -Summary: %{summary} - Documentation -Group: Documentation/HTML -BuildRequires: python3-Sphinx -BuildRequires: python3-openstackdocstheme - -%description -n python-cliff-doc -cliff is a framework for building command line programs. It uses -setuptools entry points to provide subcommands, output formatters, and -other extensions. - -This package contains documentation files for %{name}. +Command Line Interface Formulation Framework %prep -%autosetup -p1 -n cliff-3.10.1 -%py_req_cleanup +%autosetup -p1 -n cliff-%{version} %build -%py3_build -PBR_VERSION=3.10.1 PYTHONPATH=. %sphinx_build -b html doc/source doc/build/html -rm -rf doc/build/html/.{doctrees,buildinfo} +%pyproject_wheel %install -%py3_install +%pyproject_install +%python_expand %fdupes %{buildroot}%{$python_sitelib} %check # doesn't work with pytest atm rm -v cliff/tests/test_commandmanager.py -python3 -m pytest cliff/tests - -%files -n python3-cliff -%license LICENSE -%doc ChangeLog README.rst -%{python3_sitelib}/cliff -%{python3_sitelib}/*.egg-info +%pytest cliff/tests -%files -n python-cliff-doc +%files %{python_files} +%doc AUTHORS ChangeLog README.rst %license LICENSE -%doc doc/build/html +%{python_sitelib}/cliff +%{python_sitelib}/cliff-%{version}.dist-info ++++++ cliff-3.10.1.tar.gz -> cliff-4.4.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cliff-3.10.1/.pre-commit-config.yaml new/cliff-4.4.0/.pre-commit-config.yaml --- old/cliff-3.10.1/.pre-commit-config.yaml 1970-01-01 01:00:00.000000000 +0100 +++ new/cliff-4.4.0/.pre-commit-config.yaml 2023-11-14 11:07:31.000000000 +0100 @@ -0,0 +1,33 @@ +--- +default_language_version: + # force all unspecified python hooks to run python3 + python: python3 +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.4.0 + hooks: + - id: trailing-whitespace + - id: mixed-line-ending + args: ['--fix', 'lf'] + exclude: '.*\.(svg)$' + - id: check-byte-order-marker + - id: check-executables-have-shebangs + - id: check-merge-conflict + - id: debug-statements + - id: check-yaml + files: .*\.(yaml|yml)$ + exclude: '^zuul.d/.*$' + - repo: https://github.com/PyCQA/bandit + rev: 1.7.5 + hooks: + - id: bandit + args: ['-c', 'bandit.yaml'] +# - repo: https://github.com/psf/black +# rev: 23.3.0 +# hooks: +# - id: black +# args: ['-S', '-l', '79'] + - repo: https://github.com/pycqa/flake8 + rev: 6.1.0 + hooks: + - id: flake8 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cliff-3.10.1/.zuul.yaml new/cliff-4.4.0/.zuul.yaml --- old/cliff-3.10.1/.zuul.yaml 2022-02-18 16:44:27.000000000 +0100 +++ new/cliff-4.4.0/.zuul.yaml 2023-11-14 11:07:31.000000000 +0100 @@ -1,6 +1,6 @@ - job: - name: cliff-tox-py37-neutronclient-tip - parent: openstack-tox-py37 + name: cliff-tox-py38-neutronclient-tip + parent: openstack-tox-py38 description: | Run unit tests for neutronclient with master branch of cliff @@ -23,15 +23,15 @@ templates: - check-requirements - lib-forward-testing-python3 - - openstack-python3-xena-jobs + - openstack-python3-antelope-jobs - publish-openstack-docs-pti check: jobs: - - cliff-tox-py37-neutronclient-tip - - osc-tox-py36-tips: + - cliff-tox-py38-neutronclient-tip + - osc-tox-py38-tips: branches: ^master$ gate: jobs: - - cliff-tox-py37-neutronclient-tip - - osc-tox-py36-tips: + - cliff-tox-py38-neutronclient-tip + - osc-tox-py38-tips: branches: ^master$ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cliff-3.10.1/AUTHORS new/cliff-4.4.0/AUTHORS --- old/cliff-3.10.1/AUTHORS 2022-02-18 16:45:43.000000000 +0100 +++ new/cliff-4.4.0/AUTHORS 2023-11-14 11:08:01.000000000 +0100 @@ -62,6 +62,7 @@ Nguyen Hung Phuong <[email protected]> Nicola Soranzo <[email protected]> OpenStack Release Bot <[email protected]> +Pavlo Shchelokovskyy <[email protected]> Pierre-André MOREY <[email protected]> Qiu Yu <[email protected]> Rajath Agasthya <[email protected]> @@ -77,6 +78,7 @@ Stephen Finucane <[email protected]> Steve Baker <[email protected]> Steve Martinelli <[email protected]> +Takashi Kajinami <[email protected]> Terry Howe <[email protected]> TerryHowe <[email protected]> Thiago Paiva Brito <[email protected]> @@ -88,6 +90,7 @@ Vincent Legoll <[email protected]> Vitalii Kulanov <[email protected]> Yalei Wang <[email protected]> +Yandong Xuan <[email protected]> Yossi Ovadia <[email protected]> Yushiro FURUKAWA <[email protected]> Zane Bitter <[email protected]> @@ -103,6 +106,7 @@ likui <[email protected]> lingyongxu <[email protected]> liyingjun <[email protected]> +ljhuang <[email protected]> markmcclain <[email protected]> matbu <[email protected]> melissaml <[email protected]> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cliff-3.10.1/ChangeLog new/cliff-4.4.0/ChangeLog --- old/cliff-3.10.1/ChangeLog 2022-02-18 16:45:43.000000000 +0100 +++ new/cliff-4.4.0/ChangeLog 2023-11-14 11:08:01.000000000 +0100 @@ -1,6 +1,47 @@ CHANGES ======= +4.4.0 +----- + +* Handle complex objects in yaml formatter better +* Add pre-commit +* Fix pre-commit issues +* Autofit table output if stdout is a tty +* Fix flake8 violation E721 +* Use upper-constraint in doc generation + +4.3.0 +----- + +* Removing helper functions providing Python < 3.3 compatibility + +4.2.0 +----- + +* Strip trailing periods when getting description +* Clarification of the algorithm used + +4.1.0 +----- + +* columns: Useful \_\_str\_\_, \_\_repr\_\_ implementation +* Add Python3 antelope unit tests + +4.0.0 +----- + +* Removing brackets around tested conditional +* Replace abc.abstractproperty with property and abc.abstractmethod +* Remove final use of pkg\_resources +* Defer loading PyYAML +* Defer loading cmd2 +* requirements: Remove explicit python-subunit dependency +* requirements: Remove explicit pbr dependency +* requirements: Remove explicit pyparsing dependency +* Update Python testing per Zed cycle testing runtime +* Migrate Python 3.6/7 jobs to Python 3.8 + 3.10.1 ------ @@ -9,6 +50,7 @@ 3.10.0 ------ +* Add Python3 yoga unit tests 3.9.0 ----- @@ -24,6 +66,7 @@ * setup.cfg: Replace dashes with underscores * Replace getargspec with getfullargspec +* setup.cfg: Replace dashes with underscores * Use py3 as the default runtime for tox * Add Python3 xena unit tests diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cliff-3.10.1/PKG-INFO new/cliff-4.4.0/PKG-INFO --- old/cliff-3.10.1/PKG-INFO 2022-02-18 16:45:43.983875300 +0100 +++ new/cliff-4.4.0/PKG-INFO 2023-11-14 11:08:01.258277400 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 1.2 Name: cliff -Version: 3.10.1 +Version: 4.4.0 Summary: Command Line Interface Formulation Framework Home-page: https://docs.openstack.org/cliff/latest/ Author: OpenStack @@ -37,11 +37,10 @@ Classifier: License :: OSI Approved :: Apache Software License Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.6 -Classifier: Programming Language :: Python :: 3.7 Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3 :: Only Classifier: Programming Language :: Python :: Implementation :: CPython Classifier: Intended Audience :: Developers Classifier: Environment :: Console -Requires-Python: >=3.6 +Requires-Python: >=3.8 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cliff-3.10.1/bandit.yaml new/cliff-4.4.0/bandit.yaml --- old/cliff-3.10.1/bandit.yaml 2022-02-18 16:44:27.000000000 +0100 +++ new/cliff-4.4.0/bandit.yaml 2023-11-14 11:07:31.000000000 +0100 @@ -1,2 +1,4 @@ skips: - B110 +exclude_dirs: + - tests diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cliff-3.10.1/cliff/app.py new/cliff-4.4.0/cliff/app.py --- old/cliff-3.10.1/cliff/app.py 2022-02-18 16:44:27.000000000 +0100 +++ new/cliff-4.4.0/cliff/app.py 2023-11-14 11:07:31.000000000 +0100 @@ -20,8 +20,6 @@ import os import sys -import cmd2 - from cliff import _argparse from . import complete from . import help @@ -403,7 +401,12 @@ try: parsed_args = cmd_parser.parse_args(sub_argv) except SystemExit as ex: - raise cmd2.exceptions.Cmd2ArgparseError from ex + if self.interactive_mode: + # Defer importing cmd2 as it is a slow import + import cmd2 + raise cmd2.exceptions.Cmd2ArgparseError from ex + else: + raise ex result = cmd.run(parsed_args) except BrokenPipeError as err1: result = _SIGPIPE_EXIT diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cliff-3.10.1/cliff/columns.py new/cliff-4.4.0/cliff/columns.py --- old/cliff-3.10.1/cliff/columns.py 2022-02-18 16:44:27.000000000 +0100 +++ new/cliff-4.4.0/cliff/columns.py 2023-11-14 11:07:31.000000000 +0100 @@ -31,6 +31,12 @@ self.__class__ == other.__class__ and self._value < other._value ) + def __str__(self): + return self.human_readable() + + def __repr__(self): + return '%s(%r)' % (self.__class__.__name__, self.machine_readable()) + @abc.abstractmethod def human_readable(self): """Return a basic human readable version of the data.""" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cliff-3.10.1/cliff/command.py new/cliff-4.4.0/cliff/command.py --- old/cliff-3.10.1/cliff/command.py 2022-02-18 16:44:27.000000000 +0100 +++ new/cliff-4.4.0/cliff/command.py 2023-11-14 11:07:31.000000000 +0100 @@ -13,6 +13,7 @@ import abc import inspect +import importlib_metadata from stevedore import extension from cliff import _argparse @@ -27,26 +28,15 @@ distribution name (the name used with pip and PyPI) do not always match. We want to report which distribution caused the command to be installed, so we need to look up the values. - """ - import pkg_resources global _dists_by_mods if _dists_by_mods is None: - results = {} - for dist in pkg_resources.working_set: - try: - mod_names = dist.get_metadata('top_level.txt').strip() - except Exception: - # Could not retrieve metadata. Either the file is not - # present or we cannot read it. Ignore the - # distribution. - pass - else: - # Distributions may include multiple top-level - # packages (see setuptools for an example). - for mod_name in mod_names.splitlines(): - results[mod_name] = dist.project_name - _dists_by_mods = results + # There can be multiple distribution in the case of namespace packages + # so we'll just grab the first one + _dists_by_mods = { + k: v[0] for k, v in + importlib_metadata.packages_distributions().items() + } return _dists_by_mods diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cliff-3.10.1/cliff/display.py new/cliff-4.4.0/cliff/display.py --- old/cliff-3.10.1/cliff/display.py 2022-02-18 16:44:27.000000000 +0100 +++ new/cliff-4.4.0/cliff/display.py 2023-11-14 11:07:31.000000000 +0100 @@ -29,11 +29,13 @@ cmd_name=cmd_name) self._formatter_plugins = self._load_formatter_plugins() - @abc.abstractproperty + @property + @abc.abstractmethod def formatter_namespace(self): "String specifying the namespace to use for loading formatter plugins." - @abc.abstractproperty + @property + @abc.abstractmethod def formatter_default(self): "String specifying the name of the default formatter." diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cliff-3.10.1/cliff/formatters/table.py new/cliff-4.4.0/cliff/formatters/table.py --- old/cliff-3.10.1/cliff/formatters/table.py 2022-02-18 16:44:27.000000000 +0100 +++ new/cliff-4.4.0/cliff/formatters/table.py 2023-11-14 11:07:31.000000000 +0100 @@ -13,6 +13,7 @@ """Output formatters using prettytable.""" import os +import sys import prettytable @@ -32,6 +33,14 @@ return new_row +def _do_fit(fit_width): + if os.name == 'nt': + # NOTE(pas-ha) the isatty is not reliable enough on Windows, + # so do not try to auto-fit + return fit_width + return sys.stdout.isatty() or fit_width + + class TableFormatter(base.ListFormatter, base.SingleFormatter): ALIGNMENTS = { @@ -100,7 +109,7 @@ # preference to wrapping columns smaller than 8 characters. min_width = 8 self._assign_max_widths( - stdout, x, int(parsed_args.max_width), min_width, + x, int(parsed_args.max_width), min_width, parsed_args.fit_width) formatted = x.get_string() @@ -125,7 +134,7 @@ # the Field column readable. min_width = 16 self._assign_max_widths( - stdout, x, int(parsed_args.max_width), min_width, + x, int(parsed_args.max_width), min_width, parsed_args.fit_width) formatted = x.get_string() @@ -170,14 +179,18 @@ return shrink_fields, shrink_remaining @staticmethod - def _assign_max_widths(stdout, x, max_width, min_width=0, fit_width=False): + def _assign_max_widths(x, max_width, min_width=0, fit_width=False): + """Set maximum widths for columns of table `x`, + with the last column recieving either leftover columns + or `min_width`, depending on what offers more space. + """ if max_width > 0: term_width = max_width - elif not fit_width: + elif not _do_fit(fit_width): # Fitting is disabled return else: - term_width = utils.terminal_width(stdout) + term_width = utils.terminal_width() if not term_width: # not a tty, so do not set any max widths return @@ -204,6 +217,6 @@ x.max_width[field] = max(min_width, shrink_to) shrink_remaining -= shrink_to - # give the last shrinkable column shrink_to plus any remaining + # give the last shrinkable column any remaining shrink or min_width field = shrink_fields[-1] x.max_width[field] = max(min_width, shrink_remaining) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cliff-3.10.1/cliff/formatters/yaml_format.py new/cliff-4.4.0/cliff/formatters/yaml_format.py --- old/cliff-3.10.1/cliff/formatters/yaml_format.py 2022-02-18 16:44:27.000000000 +0100 +++ new/cliff-4.4.0/cliff/formatters/yaml_format.py 2023-11-14 11:07:31.000000000 +0100 @@ -13,33 +13,41 @@ """Output formatters using PyYAML. """ -import yaml - from . import base from cliff import columns +def _yaml_friendly(value): + if isinstance(value, columns.FormattableColumn): + return value.machine_readable() + elif hasattr(value, "toDict"): + return value.toDict() + elif hasattr(value, "to_dict"): + return value.to_dict() + else: + return value + + class YAMLFormatter(base.ListFormatter, base.SingleFormatter): def add_argument_group(self, parser): pass def emit_list(self, column_names, data, stdout, parsed_args): + # the yaml import is slow, so defer loading until we know we want it + import yaml + items = [] for item in data: items.append( - {n: (i.machine_readable() - if isinstance(i, columns.FormattableColumn) - else i) - for n, i in zip(column_names, item)} + {n: _yaml_friendly(i) for n, i in zip(column_names, item)} ) yaml.safe_dump(items, stream=stdout, default_flow_style=False) def emit_one(self, column_names, data, stdout, parsed_args): + # the yaml import is slow, so defer loading until we know we want it + import yaml + for key, value in zip(column_names, data): - dict_data = { - key: (value.machine_readable() - if isinstance(value, columns.FormattableColumn) - else value) - } + dict_data = {key: _yaml_friendly(value)} yaml.safe_dump(dict_data, stream=stdout, default_flow_style=False) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cliff-3.10.1/cliff/help.py new/cliff-4.4.0/cliff/help.py --- old/cliff-3.10.1/cliff/help.py 2022-02-18 16:44:27.000000000 +0100 +++ new/cliff-4.4.0/cliff/help.py 2023-11-14 11:07:31.000000000 +0100 @@ -75,7 +75,7 @@ if namespace.debug: traceback.print_exc(file=out) continue - one_liner = cmd.get_description().split('\n')[0] + one_liner = cmd.get_description().split('\n')[0].rstrip('.') dist_name = dist_for_obj(factory) if dist_name and dist_name != app_dist: dist_info = ' (' + dist_name + ')' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cliff-3.10.1/cliff/tests/test_app.py new/cliff-4.4.0/cliff/tests/test_app.py --- old/cliff-3.10.1/cliff/tests/test_app.py 2022-02-18 16:44:27.000000000 +0100 +++ new/cliff-4.4.0/cliff/tests/test_app.py 2023-11-14 11:07:31.000000000 +0100 @@ -321,7 +321,7 @@ return parser def take_action(self, parsed_args): - assert(parsed_args.end == '123') + assert parsed_args.end == '123' class MyCommandManager(commandmanager.CommandManager): def load_commands(self, namespace): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cliff-3.10.1/cliff/tests/test_columns.py new/cliff-4.4.0/cliff/tests/test_columns.py --- old/cliff-3.10.1/cliff/tests/test_columns.py 2022-02-18 16:44:27.000000000 +0100 +++ new/cliff-4.4.0/cliff/tests/test_columns.py 2023-11-14 11:07:31.000000000 +0100 @@ -23,17 +23,31 @@ class TestColumns(unittest.TestCase): - def test_faux_column_machine(self): + def test_machine_readable(self): c = FauxColumn(['list', 'of', 'values']) self.assertEqual(['list', 'of', 'values'], c.machine_readable()) - def test_faux_column_human(self): + def test_human_readable(self): c = FauxColumn(['list', 'of', 'values']) self.assertEqual( - u"I made this string myself: ['list', 'of', 'values']", + "I made this string myself: ['list', 'of', 'values']", c.human_readable(), ) + def test_str(self): + c = FauxColumn(['list', 'of', 'values']) + self.assertEqual( + "I made this string myself: ['list', 'of', 'values']", + str(c), + ) + + def test_repr(self): + c = FauxColumn(['list', 'of', 'values']) + self.assertEqual( + "FauxColumn(['list', 'of', 'values'])", + repr(c), + ) + def test_sorting(self): cols = [ FauxColumn('foo'), diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cliff-3.10.1/cliff/tests/test_formatters_table.py new/cliff-4.4.0/cliff/tests/test_formatters_table.py --- old/cliff-3.10.1/cliff/tests/test_formatters_table.py 2022-02-18 16:44:27.000000000 +0100 +++ new/cliff-4.4.0/cliff/tests/test_formatters_table.py 2023-11-14 11:07:31.000000000 +0100 @@ -50,7 +50,7 @@ if extra_args is None: # Default to no CLI arguments parsed_args = args() - elif type(extra_args) == args: + elif isinstance(extra_args, args): # Use the given CLI arguments parsed_args = extra_args else: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cliff-3.10.1/cliff/tests/test_formatters_yaml.py new/cliff-4.4.0/cliff/tests/test_formatters_yaml.py --- old/cliff-3.10.1/cliff/tests/test_formatters_yaml.py 2022-02-18 16:44:27.000000000 +0100 +++ new/cliff-4.4.0/cliff/tests/test_formatters_yaml.py 2023-11-14 11:07:31.000000000 +0100 @@ -22,6 +22,23 @@ from cliff.tests import test_columns +class _toDict: + + def __init__(self, **kwargs): + self._data = kwargs + + def toDict(self): + return self._data + + +class _to_Dict: + def __init__(self, **kwargs): + self._data = kwargs + + def to_dict(self): + return self._data + + class TestYAMLFormatter(base.TestBase): def test_format_one(self): @@ -98,3 +115,39 @@ sf.emit_list(c, d, output, args) actual = yaml.safe_load(output.getvalue()) self.assertEqual(expected, actual) + + def test_one_custom_object(self): + sf = yaml_format.YAMLFormatter() + c = ('a', 'b', 'toDict', 'to_dict') + d = ('A', 'B', _toDict(spam="ham"), _to_Dict(ham="eggs")) + expected = { + 'a': 'A', + 'b': 'B', + 'toDict': {"spam": "ham"}, + 'to_dict': {"ham": "eggs"} + } + output = StringIO() + args = mock.Mock() + sf.emit_one(c, d, output, args) + actual = yaml.safe_load(output.getvalue()) + self.assertEqual(expected, actual) + + def test_list_custom_object(self): + sf = yaml_format.YAMLFormatter() + c = ('a', 'toDict', 'to_dict') + d = ( + ('A1', _toDict(B=1), _to_Dict(C=1)), + ('A2', _toDict(B=2), _to_Dict(C=2)), + ('A3', _toDict(B=3), _to_Dict(C=3)) + ) + expected = [ + {'a': 'A1', 'toDict': {'B': 1}, 'to_dict': {'C': 1}}, + {'a': 'A2', 'toDict': {'B': 2}, 'to_dict': {'C': 2}}, + {'a': 'A3', 'toDict': {'B': 3}, 'to_dict': {'C': 3}} + ] + output = StringIO() + args = mock.Mock() + sf.add_argument_group(args) + sf.emit_list(c, d, output, args) + actual = yaml.safe_load(output.getvalue()) + self.assertEqual(expected, actual) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cliff-3.10.1/cliff/tests/test_help.py new/cliff-4.4.0/cliff/tests/test_help.py --- old/cliff-3.10.1/cliff/tests/test_help.py 2022-02-18 16:44:27.000000000 +0100 +++ new/cliff-4.4.0/cliff/tests/test_help.py 2023-11-14 11:07:31.000000000 +0100 @@ -103,8 +103,8 @@ self.assertIn('usage: %s [--version]' % basecommand, help_text) self.assertRegex(help_text, 'option(s|al arguments):\n --version') expected = ( - ' one Test command.\n' - ' three word command Test command.\n' + ' one Test command\n' + ' three word command Test command\n' ) self.assertIn(expected, help_text) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cliff-3.10.1/cliff/tests/test_utils.py new/cliff-4.4.0/cliff/tests/test_utils.py --- old/cliff-3.10.1/cliff/tests/test_utils.py 2022-02-18 16:44:27.000000000 +0100 +++ new/cliff-4.4.0/cliff/tests/test_utils.py 2023-11-14 11:07:31.000000000 +0100 @@ -13,7 +13,6 @@ # under the License. import os -import sys from unittest import mock from cliff.tests import base @@ -23,7 +22,7 @@ class TestTerminalWidth(base.TestBase): def test(self): - width = utils.terminal_width(sys.stdout) + width = utils.terminal_width() # Results are specific to the execution environment, so only assert # that no error is raised. if width is not None: @@ -33,8 +32,8 @@ def test_get_terminal_size(self, mock_os): ts = os.terminal_size((10, 5)) mock_os.get_terminal_size.return_value = ts - width = utils.terminal_width(sys.stdout) + width = utils.terminal_width() self.assertEqual(10, width) mock_os.get_terminal_size.side_effect = OSError() - width = utils.terminal_width(sys.stdout) + width = utils.terminal_width() self.assertIs(None, width) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cliff-3.10.1/cliff/utils.py new/cliff-4.4.0/cliff/utils.py --- old/cliff-3.10.1/cliff/utils.py 2022-02-18 16:44:27.000000000 +0100 +++ new/cliff-4.4.0/cliff/utils.py 2023-11-14 11:07:31.000000000 +0100 @@ -11,10 +11,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -import ctypes import os -import struct -import sys # Each edit operation is assigned different cost, such as: # 'w' means swap operation, the cost is 0; @@ -28,9 +25,9 @@ def damerau_levenshtein(s1, s2, cost): """Calculates the Damerau-Levenshtein distance between two strings. - The Levenshtein distance says the minimum number of single-character edits - (i.e. insertions, deletions, swap or substitution) required to change one - string to the other. + The Damerau-Levenshtein distance says the minimum number of single + character edits (i.e. insertions, deletions, swap or substitution) + required to change one string to the other. The idea is to reserve a matrix to hold the Levenshtein distances between all prefixes of the first string and all prefixes of the second, then we can compute the values in the matrix in a dynamic programming fashion. To @@ -39,7 +36,7 @@ the row before that.) More details: - https://en.wikipedia.org/wiki/Levenshtein_distance + https://en.wikipedia.org/wiki/Damerau%E2%80%93Levenshtein_distance https://github.com/git/git/commit/8af84dadb142f7321ff0ce8690385e99da8ede2f """ @@ -93,63 +90,15 @@ return row1[-1] -def terminal_width(stdout): - if hasattr(os, 'get_terminal_size'): - # python 3.3 onwards has built-in support for getting terminal size - try: - return os.get_terminal_size().columns - except OSError: - return None - - if sys.platform == 'win32': - return _get_terminal_width_windows(stdout) - else: - return _get_terminal_width_ioctl(stdout) - - -def _get_terminal_width_windows(stdout): - STD_INPUT_HANDLE = -10 - STD_OUTPUT_HANDLE = -11 - STD_ERROR_HANDLE = -12 - - std_to_win_handle = { - sys.stdin: STD_INPUT_HANDLE, - sys.stdout: STD_OUTPUT_HANDLE, - sys.stderr: STD_ERROR_HANDLE} +def terminal_width(): + """Return terminal width in columns - std_handle = std_to_win_handle.get(stdout) - if not std_handle: - return None - - handle = ctypes.windll.kernel32.GetStdHandle(std_handle) - csbi = ctypes.create_string_buffer(22) - - res = ctypes.windll.kernel32.GetConsoleScreenBufferInfo(handle, csbi) - if res: - (size_x, size_y, cur_pos_x, cur_pos_y, attr, - left, top, right, bottom, max_size_x, max_size_y) = struct.unpack( - "hhhhHhhhhhh", csbi.raw) - return size_x - - -def _get_terminal_width_ioctl(stdout): - from fcntl import ioctl - import termios + Uses `os.get_terminal_size` function + :returns: terminal width + :rtype: int or None + """ try: - # winsize structure has 4 unsigned short fields - winsize = b'\0' * struct.calcsize('hhhh') - try: - winsize = ioctl(stdout, termios.TIOCGWINSZ, winsize) - except IOError: - return None - except TypeError: - # this is raised in unit tests as stdout is sometimes a StringIO - return None - winsize = struct.unpack('hhhh', winsize) - columns = winsize[1] - if not columns: - return None - return columns - except IOError: + return os.get_terminal_size().columns + except OSError: return None diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cliff-3.10.1/cliff.egg-info/PKG-INFO new/cliff-4.4.0/cliff.egg-info/PKG-INFO --- old/cliff-3.10.1/cliff.egg-info/PKG-INFO 2022-02-18 16:45:43.000000000 +0100 +++ new/cliff-4.4.0/cliff.egg-info/PKG-INFO 2023-11-14 11:08:01.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 1.2 Name: cliff -Version: 3.10.1 +Version: 4.4.0 Summary: Command Line Interface Formulation Framework Home-page: https://docs.openstack.org/cliff/latest/ Author: OpenStack @@ -37,11 +37,10 @@ Classifier: License :: OSI Approved :: Apache Software License Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.6 -Classifier: Programming Language :: Python :: 3.7 Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3 :: Only Classifier: Programming Language :: Python :: Implementation :: CPython Classifier: Intended Audience :: Developers Classifier: Environment :: Console -Requires-Python: >=3.6 +Requires-Python: >=3.8 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cliff-3.10.1/cliff.egg-info/SOURCES.txt new/cliff-4.4.0/cliff.egg-info/SOURCES.txt --- old/cliff-3.10.1/cliff.egg-info/SOURCES.txt 2022-02-18 16:45:43.000000000 +0100 +++ new/cliff-4.4.0/cliff.egg-info/SOURCES.txt 2023-11-14 11:08:01.000000000 +0100 @@ -1,3 +1,4 @@ +.pre-commit-config.yaml .stestr.conf .zuul.yaml AUTHORS @@ -95,4 +96,5 @@ releasenotes/notes/command-group-8c00f260340a130c.yaml releasenotes/notes/comparable-FormattableColumn-31c0030ced70b7fb.yaml releasenotes/notes/drop-python27-support-b16c9e5a9e2000ef.yaml -releasenotes/notes/handle-none-values-when-sorting-de40e36c66ad95ca.yaml \ No newline at end of file +releasenotes/notes/handle-none-values-when-sorting-de40e36c66ad95ca.yaml +releasenotes/notes/strip-period-from-help-strings-be368e5cf5bd5269.yaml \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cliff-3.10.1/cliff.egg-info/pbr.json new/cliff-4.4.0/cliff.egg-info/pbr.json --- old/cliff-3.10.1/cliff.egg-info/pbr.json 2022-02-18 16:45:43.000000000 +0100 +++ new/cliff-4.4.0/cliff.egg-info/pbr.json 2023-11-14 11:08:01.000000000 +0100 @@ -1 +1 @@ -{"git_version": "a04a48f", "is_release": true} \ No newline at end of file +{"git_version": "3ee0725", "is_release": true} \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cliff-3.10.1/cliff.egg-info/requires.txt new/cliff-4.4.0/cliff.egg-info/requires.txt --- old/cliff-3.10.1/cliff.egg-info/requires.txt 2022-02-18 16:45:43.000000000 +0100 +++ new/cliff-4.4.0/cliff.egg-info/requires.txt 2023-11-14 11:08:01.000000000 +0100 @@ -2,6 +2,5 @@ PyYAML>=3.12 autopage>=0.4.0 cmd2>=1.0.0 -pbr!=2.1.0,>=2.0.0 -pyparsing>=2.1.0 +importlib_metadata>=4.4 stevedore>=2.0.1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cliff-3.10.1/demoapp/README.rst new/cliff-4.4.0/demoapp/README.rst --- old/cliff-3.10.1/demoapp/README.rst 2022-02-18 16:44:27.000000000 +0100 +++ new/cliff-4.4.0/demoapp/README.rst 2023-11-14 11:07:31.000000000 +0100 @@ -12,7 +12,7 @@ $ pip install virtualenv $ virtualenv .venv $ . .venv/bin/activate - (.venv)$ + (.venv)$ Next, install ``cliff`` in the environment. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cliff-3.10.1/doc/source/user/complete.rst new/cliff-4.4.0/doc/source/user/complete.rst --- old/cliff-3.10.1/doc/source/user/complete.rst 2022-02-18 16:44:27.000000000 +0100 +++ new/cliff-4.4.0/doc/source/user/complete.rst 2023-11-14 11:07:31.000000000 +0100 @@ -29,7 +29,7 @@ local cur prev words COMPREPLY=() _get_comp_words_by_ref -n : cur prev words - + # Command data: cmds='agent aggregate backup' cmds_agent='--name' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cliff-3.10.1/doc/source/user/interactive_mode.rst new/cliff-4.4.0/doc/source/user/interactive_mode.rst --- old/cliff-3.10.1/doc/source/user/interactive_mode.rst 2022-02-18 16:44:27.000000000 +0100 +++ new/cliff-4.4.0/doc/source/user/interactive_mode.rst 2023-11-14 11:07:31.000000000 +0100 @@ -23,16 +23,16 @@ (.venv)$ cliffdemo (cliffdemo) help - + Shell commands (type help <topic>): =================================== cmdenvironment edit hi l list pause r save shell show ed help history li load py run set shortcuts - + Undocumented commands: ====================== EOF eof exit q quit - + Application commands (type help <topic>): ========================================= files help simple file error two part @@ -41,12 +41,12 @@ ``help`` command: :: - + (cliffdemo) help simple usage: simple [-h] - + A simple command that prints a message. - + optional arguments: -h, --help Show help message and exit. @@ -54,7 +54,7 @@ regular command line: :: - + (cliffdemo) simple sending greeting hi! @@ -89,4 +89,4 @@ | tox.ini | 76 | | tox.ini~ | 421 | +----------------------+-------+ - (cliffdemo) + (cliffdemo) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cliff-3.10.1/doc/source/user/introduction.rst new/cliff-4.4.0/doc/source/user/introduction.rst --- old/cliff-3.10.1/doc/source/user/introduction.rst 2022-02-18 16:44:27.000000000 +0100 +++ new/cliff-4.4.0/doc/source/user/introduction.rst 2023-11-14 11:07:31.000000000 +0100 @@ -4,7 +4,7 @@ The cliff framework is meant to be used to create multi-level commands such as subversion and git, where the main program handles some basic -argument parsing and then invokes a sub-command to do the work. +argument parsing and then invokes a sub-command to do the work. Command Plugins =============== diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cliff-3.10.1/doc/source/user/list_commands.rst new/cliff-4.4.0/doc/source/user/list_commands.rst --- old/cliff-3.10.1/doc/source/user/list_commands.rst 2022-02-18 16:44:27.000000000 +0100 +++ new/cliff-4.4.0/doc/source/user/list_commands.rst 2023-11-14 11:07:31.000000000 +0100 @@ -35,7 +35,7 @@ further manipulation. :: - + (.venv)$ cliffdemo files -f csv "Name","Size" "build",136 @@ -52,7 +52,7 @@ .. _PrettyTable: https://pypi.org/project/prettytable/ :: - + (.venv)$ cliffdemo files +---------------+------+ | Name | Size | @@ -69,7 +69,7 @@ The ``value`` formatter produces a space separated output with no headers. :: - + (.venv)$ cliffdemo files -f value build 136 cliffdemo.log 2690 @@ -80,7 +80,7 @@ a script. :: - + (.venv)$ cliffdemo files -f value | while read NAME SIZE do echo $NAME is $SIZE bytes @@ -125,15 +125,15 @@ (.venv)$ cliffdemo files -f json [ { - "Name": "source", + "Name": "source", "Size": 4096 - }, + }, { - "Name": "Makefile", + "Name": "Makefile", "Size": 5569 - }, + }, { - "Name": "build", + "Name": "build", "Size": 4096 } ] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cliff-3.10.1/doc/source/user/show_commands.rst new/cliff-4.4.0/doc/source/user/show_commands.rst --- old/cliff-3.10.1/doc/source/user/show_commands.rst 2022-02-18 16:44:27.000000000 +0100 +++ new/cliff-4.4.0/doc/source/user/show_commands.rst 2023-11-14 11:07:31.000000000 +0100 @@ -110,10 +110,10 @@ (.venv)$ cliffdemo file -f json setup.py { - "Modified Time": 1438726433.8055942, - "GID": 1000, - "UID": 1000, - "Name": "setup.py", + "Modified Time": 1438726433.8055942, + "GID": 1000, + "UID": 1000, + "Name": "setup.py", "Size": 1028 } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cliff-3.10.1/doc/source/user/sphinxext.rst new/cliff-4.4.0/doc/source/user/sphinxext.rst --- old/cliff-3.10.1/doc/source/user/sphinxext.rst 2022-02-18 16:44:27.000000000 +0100 +++ new/cliff-4.4.0/doc/source/user/sphinxext.rst 2023-11-14 11:07:31.000000000 +0100 @@ -7,6 +7,8 @@ cliff supports integration with Sphinx by way of a `Sphinx directives`__. +__ http://www.sphinx-doc.org/en/stable/extdev/markupapi.html + Preparation ----------- @@ -68,6 +70,8 @@ This option is effective only in the **command** mode. + __ https://docs.python.org/3/library/fnmatch.html + `:arguments` The arguments to be passed when the cliff application is instantiated. Some cliff applications requires arguments when instantiated. @@ -154,8 +158,8 @@ Simple Example (`demoapp`) -------------------------- -`cliff` provides a sample application, :doc:`demoapp`, to demonstrate some of the -features of `cliff`. This application :ref:`is documented <demoapp-sphinx>` +`cliff` provides a sample application, :doc:`demoapp`, to demonstrate some of +the features of `cliff`. This application :ref:`is documented <demoapp-sphinx>` using the `cliff.sphinxext` Sphinx extension. Advanced Example (`python-openstackclient`) @@ -206,6 +210,4 @@ autoprogram_cliff_application = 'openstack' -__ http://www.sphinx-doc.org/en/stable/extdev/markupapi.html -__ https://docs.python.org/3/library/fnmatch.html __ https://docs.openstack.org/python-openstackclient/ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cliff-3.10.1/releasenotes/notes/strip-period-from-help-strings-be368e5cf5bd5269.yaml new/cliff-4.4.0/releasenotes/notes/strip-period-from-help-strings-be368e5cf5bd5269.yaml --- old/cliff-3.10.1/releasenotes/notes/strip-period-from-help-strings-be368e5cf5bd5269.yaml 1970-01-01 01:00:00.000000000 +0100 +++ new/cliff-4.4.0/releasenotes/notes/strip-period-from-help-strings-be368e5cf5bd5269.yaml 2023-11-14 11:07:31.000000000 +0100 @@ -0,0 +1,6 @@ +--- +features: + - | + Trailing periods will now be stripped from the oneline summary shown + for the help command. This better aligns with the format used by + argparse itself. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cliff-3.10.1/requirements.txt new/cliff-4.4.0/requirements.txt --- old/cliff-3.10.1/requirements.txt 2022-02-18 16:44:27.000000000 +0100 +++ new/cliff-4.4.0/requirements.txt 2023-11-14 11:07:31.000000000 +0100 @@ -1,10 +1,7 @@ -# The order of packages is significant, because pip processes them in the order -# of appearance. Changing the order has an impact on the overall integration -# process, which may cause wedges in the gate later. -pbr!=2.1.0,>=2.0.0 # Apache-2.0 autopage>=0.4.0 # Apache 2.0 +# TODO: Drop this when Python 3.10 is our minimum supported version +importlib_metadata>=4.4 # Apache-2.0 cmd2>=1.0.0 # MIT PrettyTable>=0.7.2 # BSD -pyparsing>=2.1.0 # MIT stevedore>=2.0.1 # Apache-2.0 PyYAML>=3.12 # MIT diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cliff-3.10.1/setup.cfg new/cliff-4.4.0/setup.cfg --- old/cliff-3.10.1/setup.cfg 2022-02-18 16:45:43.983875300 +0100 +++ new/cliff-4.4.0/setup.cfg 2023-11-14 11:08:01.258277400 +0100 @@ -5,15 +5,14 @@ author_email = [email protected] summary = Command Line Interface Formulation Framework home_page = https://docs.openstack.org/cliff/latest/ -python_requires = >=3.6 +python_requires = >=3.8 classifier = Development Status :: 5 - Production/Stable License :: OSI Approved :: Apache Software License Programming Language :: Python Programming Language :: Python :: 3 - Programming Language :: Python :: 3.6 - Programming Language :: Python :: 3.7 Programming Language :: Python :: 3.8 + Programming Language :: Python :: 3.9 Programming Language :: Python :: 3 :: Only Programming Language :: Python :: Implementation :: CPython Intended Audience :: Developers diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cliff-3.10.1/test-requirements.txt new/cliff-4.4.0/test-requirements.txt --- old/cliff-3.10.1/test-requirements.txt 2022-02-18 16:44:27.000000000 +0100 +++ new/cliff-4.4.0/test-requirements.txt 2023-11-14 11:07:31.000000000 +0100 @@ -1,8 +1,3 @@ -# The order of packages is significant, because pip processes them in the order -# of appearance. Changing the order has an impact on the overall integration -# process, which may cause wedges in the gate later. - -python-subunit>=1.0.0 # Apache-2.0/BSD stestr>=1.0.0 # Apache-2.0 testtools>=2.2.0 # MIT testscenarios>=0.4 # Apache-2.0/BSD diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cliff-3.10.1/tox.ini new/cliff-4.4.0/tox.ini --- old/cliff-3.10.1/tox.ini 2022-02-18 16:44:27.000000000 +0100 +++ new/cliff-4.4.0/tox.ini 2023-11-14 11:07:31.000000000 +0100 @@ -45,7 +45,9 @@ commands = {toxinidir}/integration-tests/openstackclient-tip.sh {envdir} [testenv:docs] -deps = -r{toxinidir}/doc/requirements.txt +deps = + -c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master} + -r{toxinidir}/doc/requirements.txt commands = sphinx-build -W -b html doc/source doc/build/html [testenv:cover]
