Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-cloup for openSUSE:Factory checked in at 2023-07-17 19:23:09 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-cloup (Old) and /work/SRC/openSUSE:Factory/.python-cloup.new.3193 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-cloup" Mon Jul 17 19:23:09 2023 rev:4 rq:1098721 version:2.1.2 Changes: -------- --- /work/SRC/openSUSE:Factory/python-cloup/python-cloup.changes 2023-06-12 15:26:49.155182563 +0200 +++ /work/SRC/openSUSE:Factory/.python-cloup.new.3193/python-cloup.changes 2023-07-17 19:23:27.733798533 +0200 @@ -1,0 +2,9 @@ +Fri Jul 14 14:40:26 UTC 2023 - Eyad Issa <eyadlore...@gmail.com> + +- Update to 2.1.2 + * Fix: default to Group.command_class and Group.group_class when creating subcommands by @janluke in #162 + * Upgrade dev dependencies (no docs) by @janluke in #161 + +Full changelog: https://github.com/janluke/cloup/compare/v2.1.1...v2.1.2 + +------------------------------------------------------------------- Old: ---- cloup-2.1.1.tar.gz New: ---- cloup-2.1.2.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-cloup.spec ++++++ --- /var/tmp/diff_new_pack.X7xwZU/_old 2023-07-17 19:23:28.333802009 +0200 +++ /var/tmp/diff_new_pack.X7xwZU/_new 2023-07-17 19:23:28.337802033 +0200 @@ -17,14 +17,16 @@ Name: python-cloup -Version: 2.1.1 +Version: 2.1.2 Release: 0 Summary: Option groups, constraints, subcommand sections and help themes for Click License: BSD-3-Clause URL: https://github.com/janLuke/cloup Source: https://files.pythonhosted.org/packages/source/c/cloup/cloup-%{version}.tar.gz +BuildRequires: %{python_module pip} BuildRequires: %{python_module setuptools_scm} BuildRequires: %{python_module setuptools} +BuildRequires: %{python_module wheel} BuildRequires: python-rpm-macros # SECTION test requirements BuildRequires: %{python_module click >= 8.0} @@ -44,10 +46,10 @@ %autosetup -n cloup-%{version} %build -%python_build +%pyproject_wheel %install -%python_install +%pyproject_install %python_expand %fdupes %{buildroot}%{$python_sitelib} %check ++++++ cloup-2.1.1.tar.gz -> cloup-2.1.2.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cloup-2.1.1/Makefile new/cloup-2.1.2/Makefile --- old/cloup-2.1.1/Makefile 2023-06-03 16:20:28.000000000 +0200 +++ new/cloup-2.1.2/Makefile 2023-07-13 20:09:42.000000000 +0200 @@ -108,18 +108,20 @@ test-release: dist ## package and upload a release twine upload --repository testpypi dist/* +PIP_COMPILE := pip-compile --resolver=backtracking + .PHONY: pip-compile pip-compile: ## pin dependencies in requirements/ using the current env - pip-compile requirements/test.in - pip-compile requirements/docs.in - pip-compile requirements/dev.in + $(PIP_COMPILE) requirements/test.in + $(PIP_COMPILE) requirements/docs.in + $(PIP_COMPILE) requirements/dev.in .PHONY: pip-upgrade pip-upgrade: ## upgrade pip and dependencies python -m pip install -U pip - pip-compile --upgrade requirements/test.in - pip-compile --upgrade requirements/docs.in - pip-compile --upgrade requirements/dev.in + $(PIP_COMPILE) --upgrade requirements/test.in + # $(PIP_COMPILE) --upgrade requirements/docs.in + $(PIP_COMPILE) --upgrade requirements/dev.in .PHONY: pip-sync pip-sync: ## sync development environment with requirements/dev.txt diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cloup-2.1.1/PKG-INFO new/cloup-2.1.2/PKG-INFO --- old/cloup-2.1.1/PKG-INFO 2023-06-03 16:20:39.000000000 +0200 +++ new/cloup-2.1.2/PKG-INFO 2023-07-13 20:09:55.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: cloup -Version: 2.1.1 +Version: 2.1.2 Summary: Adds features to Click: option groups, constraints, subcommand sections and help themes. Home-page: https://github.com/janLuke/cloup Author: Gianluca Gippetto diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cloup-2.1.1/cloup/_commands.py new/cloup-2.1.2/cloup/_commands.py --- old/cloup-2.1.1/cloup/_commands.py 2023-06-03 16:20:28.000000000 +0200 +++ new/cloup-2.1.2/cloup/_commands.py 2023-07-13 20:09:42.000000000 +0200 @@ -17,15 +17,15 @@ - in one signature, ``cls`` has type ``None`` and it's set to ``None``; in this case the type of the instantiated command is ``cloup.Command`` for ``@command`` and ``cloup.Group`` for ``@group`` -- in the other signature, there's ``cls: ClickCommand`` without a default, where - ``ClickCommand`` is a type variable. +- in the other signature, there's ``cls: C`` without a default, where ``C`` is + a type variable; in this case the type of the instantiated command is ``C``. When and if the MyPy issue is resolved, the overloads will be removed. """ import inspect from typing import ( Any, Callable, Dict, Iterable, List, NamedTuple, Optional, Sequence, Tuple, - Type, TypeVar, Union, cast, overload, + Type, TypeVar, Union, cast, overload ) import click @@ -39,8 +39,9 @@ from .styling import DEFAULT_THEME from .typing import AnyCallable -ClickCommand = TypeVar('ClickCommand', bound=click.Command) -ClickGroup = TypeVar('ClickGroup', bound=click.Group) +# Generic types of ``cls`` args of ``@command`` and ``@group`` +C = TypeVar('C', bound=click.Command) +G = TypeVar('G', bound=click.Group) class Command(ConstraintMixin, OptionGroupMixin, click.Command): @@ -256,7 +257,7 @@ self, name: Optional[str] = None, *, aliases: Optional[Iterable[str]] = None, - cls: None = None, # Command is cloup.Command + cls: None = None, # default to Group.command_class or cloup.Command section: Optional[Section] = None, context_settings: Optional[Dict[str, Any]] = None, formatter_settings: Optional[Dict[str, Any]] = None, @@ -271,7 +272,7 @@ align_option_groups: Optional[bool] = None, show_constraints: Optional[bool] = None, params: Optional[List[click.Parameter]] = None, - ) -> Callable[[AnyCallable], Command]: + ) -> Callable[[AnyCallable], click.Command]: ... @overload @@ -279,7 +280,7 @@ self, name: Optional[str] = None, *, aliases: Optional[Iterable[str]] = None, - cls: Type[ClickCommand], + cls: Type[C], section: Optional[Section] = None, context_settings: Optional[Dict[str, Any]] = None, help: Optional[str] = None, @@ -292,16 +293,16 @@ deprecated: bool = False, params: Optional[List[click.Parameter]] = None, **kwargs: Any, - ) -> Callable[[AnyCallable], ClickCommand]: + ) -> Callable[[AnyCallable], C]: ... def command( self, name: Optional[str] = None, *, aliases: Optional[Iterable[str]] = None, - cls: Optional[Type[ClickCommand]] = None, + cls: Optional[Type[C]] = None, section: Optional[Section] = None, **kwargs: Any - ) -> Callable[[AnyCallable], Union[Command, ClickCommand]]: + ) -> Callable[[AnyCallable], Union[click.Command, C]]: """Return a decorator that creates a new subcommand of this ``Group`` using the decorated function as callback. @@ -313,9 +314,12 @@ .. versionchanged:: 0.10.0 all arguments but ``name`` are now keyword-only. """ - make_command = command(name=name, cls=cls, aliases=aliases, **kwargs) + make_command = command( + name=name, cls=(self.command_class if cls is None else cls), + aliases=aliases, **kwargs + ) - def decorator(f: AnyCallable) -> Union[Command, ClickCommand]: + def decorator(f: AnyCallable) -> click.Command: cmd = make_command(f) self.add_command(cmd, section=section) return cmd @@ -347,14 +351,14 @@ chain: bool = False, hidden: bool = False, deprecated: bool = False, - ) -> Callable[[AnyCallable], 'Group']: + ) -> Callable[[AnyCallable], click.Group]: ... @overload def group( # Why overloading? Refer to module docstring. self, name: Optional[str] = None, *, aliases: Optional[Iterable[str]] = None, - cls: Type[ClickGroup], + cls: Optional[Type[G]] = None, section: Optional[Section] = None, invoke_without_command: bool = False, no_args_is_help: bool = False, @@ -370,17 +374,17 @@ deprecated: bool = False, params: Optional[List[click.Parameter]] = None, **kwargs: Any - ) -> Callable[[AnyCallable], ClickGroup]: + ) -> Callable[[AnyCallable], G]: ... def group( # type: ignore self, name: Optional[None] = None, *, - cls: Optional[Type[ClickGroup]] = None, + cls: Optional[Type[G]] = None, aliases: Optional[Iterable[str]] = None, section: Optional[Section] = None, **kwargs: Any - ) -> Callable[[AnyCallable], Union["Group", ClickGroup]]: + ) -> Callable[[AnyCallable], Union[click.Group, G]]: """Return a decorator that creates a new subcommand of this ``Group`` using the decorated function as callback. @@ -392,15 +396,26 @@ .. versionchanged:: 0.10.0 all arguments but ``name`` are now keyword-only. """ - make_group = group(name=name, cls=cls, aliases=aliases, **kwargs) + make_group = group( + name=name, cls=cls or self._default_group_class(), aliases=aliases, **kwargs + ) - def decorator(f: AnyCallable) -> Union["Group", ClickGroup]: + def decorator(f: AnyCallable) -> Union[click.Group, G]: cmd = make_group(f) self.add_command(cmd, section=section) return cmd return decorator + @classmethod + def _default_group_class(cls) -> Optional[Type[click.Group]]: + if cls.group_class is None: + return None + if cls.group_class is type: + return cls + else: + return cast(Type[click.Group], cls.group_class) + # Why overloading? Refer to module docstring. @overload # In this overload: "cls: None = None" @@ -431,7 +446,7 @@ name: Optional[str] = None, *, aliases: Optional[Iterable[str]] = None, - cls: Type[ClickCommand], + cls: Type[C], context_settings: Optional[Dict[str, Any]] = None, help: Optional[str] = None, short_help: Optional[str] = None, @@ -443,7 +458,7 @@ deprecated: bool = False, params: Optional[List[click.Parameter]] = None, **kwargs: Any -) -> Callable[[AnyCallable], ClickCommand]: +) -> Callable[[AnyCallable], C]: ... @@ -451,9 +466,9 @@ def command( name: Optional[str] = None, *, aliases: Optional[Iterable[str]] = None, - cls: Optional[Type[ClickCommand]] = None, + cls: Optional[Type[C]] = None, **kwargs: Any -) -> Callable[[AnyCallable], Union[Command, ClickCommand]]: +) -> Callable[[AnyCallable], Union[Command, C]]: """ Return a decorator that creates a new command using the decorated function as callback. @@ -538,7 +553,7 @@ f"While parenthesis are optional in Click >= 8.1, they are required in Cloup." ) - def decorator(f: AnyCallable) -> ClickCommand: + def decorator(f: AnyCallable) -> C: if hasattr(f, '__cloup_constraints__'): if cls and not issubclass(cls, ConstraintMixin): raise TypeError( @@ -550,7 +565,7 @@ cmd_cls = cls if cls is not None else Command try: - cmd = cast(ClickCommand, click.command(name, cls=cmd_cls, **kwargs)(f)) + cmd = cast(C, click.command(name, cls=cmd_cls, **kwargs)(f)) if aliases: cmd.aliases = list(aliases) # type: ignore return cmd @@ -590,7 +605,7 @@ def group( name: Optional[str] = None, *, - cls: Type[ClickGroup], + cls: Type[G], aliases: Optional[Iterable[str]] = None, invoke_without_command: bool = False, no_args_is_help: bool = False, @@ -606,12 +621,12 @@ deprecated: bool = False, params: Optional[List[click.Parameter]] = None, **kwargs: Any -) -> Callable[[AnyCallable], ClickGroup]: +) -> Callable[[AnyCallable], G]: ... def group( - name: Optional[str] = None, *, cls: Optional[Type[ClickGroup]] = None, **kwargs: Any + name: Optional[str] = None, *, cls: Optional[Type[G]] = None, **kwargs: Any ) -> Callable[[AnyCallable], click.Group]: """ Return a decorator that instantiates a ``Group`` (or a subclass of it) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cloup-2.1.1/cloup/_version.py new/cloup-2.1.2/cloup/_version.py --- old/cloup-2.1.1/cloup/_version.py 2023-06-03 16:20:39.000000000 +0200 +++ new/cloup-2.1.2/cloup/_version.py 2023-07-13 20:09:55.000000000 +0200 @@ -1,4 +1,4 @@ # file generated by setuptools_scm # don't change, don't track in version control -__version__ = version = '2.1.1' -__version_tuple__ = version_tuple = (2, 1, 1) +__version__ = version = '2.1.2' +__version_tuple__ = version_tuple = (2, 1, 2) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cloup-2.1.1/cloup.egg-info/PKG-INFO new/cloup-2.1.2/cloup.egg-info/PKG-INFO --- old/cloup-2.1.1/cloup.egg-info/PKG-INFO 2023-06-03 16:20:39.000000000 +0200 +++ new/cloup-2.1.2/cloup.egg-info/PKG-INFO 2023-07-13 20:09:55.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: cloup -Version: 2.1.1 +Version: 2.1.2 Summary: Adds features to Click: option groups, constraints, subcommand sections and help themes. Home-page: https://github.com/janLuke/cloup Author: Gianluca Gippetto diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cloup-2.1.1/requirements/dev.in new/cloup-2.1.2/requirements/dev.in --- old/cloup-2.1.1/requirements/dev.in 2023-06-03 16:20:28.000000000 +0200 +++ new/cloup-2.1.2/requirements/dev.in 2023-07-13 20:09:42.000000000 +0200 @@ -2,6 +2,6 @@ -r docs.txt flake8 mypy -tox +tox < 4 twine sphinx-autobuild diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cloup-2.1.1/requirements/dev.txt new/cloup-2.1.2/requirements/dev.txt --- old/cloup-2.1.1/requirements/dev.txt 2023-06-03 16:20:28.000000000 +0200 +++ new/cloup-2.1.2/requirements/dev.txt 2023-07-13 20:09:42.000000000 +0200 @@ -1,195 +1,194 @@ # -# This file is autogenerated by pip-compile with python 3.8 -# To update, run: +# This file is autogenerated by pip-compile with Python 3.8 +# by the following command: # -# pip-compile 'requirements\dev.in' +# pip-compile --resolver=backtracking requirements/dev.in # -alabaster==0.7.12 +alabaster==0.7.13 # via - # -r requirements\docs.txt + # -r requirements/docs.txt # sphinx -astroid==2.12.2 +astroid==2.15.6 # via - # -r requirements\docs.txt + # -r requirements/docs.txt # sphinx-autoapi -atomicwrites==1.4.1 +babel==2.12.1 # via - # -r requirements\test.txt - # pytest -attrs==21.4.0 - # via - # -r requirements\test.txt - # pytest -babel==2.10.3 - # via - # -r requirements\docs.txt + # -r requirements/docs.txt # sphinx -beautifulsoup4==4.11.1 +beautifulsoup4==4.12.2 # via - # -r requirements\docs.txt + # -r requirements/docs.txt # furo -bleach==5.0.1 +bleach==6.0.0 # via readme-renderer -certifi==2022.6.15 +certifi==2023.5.7 # via - # -r requirements\docs.txt + # -r requirements/docs.txt # requests -charset-normalizer==2.1.0 +cffi==1.15.1 + # via cryptography +charset-normalizer==3.2.0 # via - # -r requirements\docs.txt + # -r requirements/docs.txt # requests -colorama==0.4.5 - # via - # -r requirements\docs.txt - # -r requirements\test.txt - # pytest - # sphinx - # sphinx-autobuild - # tox -commonmark==0.9.1 - # via rich -coverage[toml]==6.4.2 +colorama==0.4.6 + # via sphinx-autobuild +coverage[toml]==7.2.7 # via - # -r requirements\test.txt + # -r requirements/test.txt # pytest-cov -distlib==0.3.5 +cryptography==41.0.2 + # via secretstorage +distlib==0.3.6 # via virtualenv docutils==0.16 # via - # -r requirements\docs.txt + # -r requirements/docs.txt # readme-renderer # sphinx # sphinx-panels -filelock==3.7.1 +exceptiongroup==1.1.2 + # via + # -r requirements/test.txt + # pytest +filelock==3.12.2 # via # tox # virtualenv -flake8==4.0.1 - # via -r requirements\dev.in +flake8==6.0.0 + # via -r requirements/dev.in furo==2021.4.11b34 - # via -r requirements\docs.txt -idna==3.3 + # via -r requirements/docs.txt +idna==3.4 # via - # -r requirements\docs.txt + # -r requirements/docs.txt # requests imagesize==1.4.1 # via - # -r requirements\docs.txt + # -r requirements/docs.txt # sphinx -importlib-metadata==4.12.0 +importlib-metadata==6.8.0 # via # keyring # twine -iniconfig==1.1.1 +importlib-resources==6.0.0 + # via keyring +iniconfig==2.0.0 # via - # -r requirements\test.txt + # -r requirements/test.txt # pytest +jaraco-classes==3.3.0 + # via keyring +jeepney==0.8.0 + # via + # keyring + # secretstorage jinja2==3.0.3 # via - # -r requirements\docs.txt + # -r requirements/docs.txt # sphinx # sphinx-autoapi -keyring==23.7.0 +keyring==24.2.0 # via twine -lazy-object-proxy==1.7.1 +lazy-object-proxy==1.9.0 # via - # -r requirements\docs.txt + # -r requirements/docs.txt # astroid livereload==2.6.3 # via sphinx-autobuild -markupsafe==2.1.1 +markdown-it-py==3.0.0 + # via rich +markupsafe==2.1.3 # via - # -r requirements\docs.txt + # -r requirements/docs.txt # jinja2 -mccabe==0.6.1 +mccabe==0.7.0 # via flake8 -mypy==0.961 - # via -r requirements\dev.in -mypy-extensions==0.4.3 +mdurl==0.1.2 + # via markdown-it-py +more-itertools==9.1.0 + # via jaraco-classes +mypy==1.4.1 + # via -r requirements/dev.in +mypy-extensions==1.0.0 # via mypy -packaging==21.3 +packaging==23.1 # via - # -r requirements\docs.txt - # -r requirements\test.txt + # -r requirements/docs.txt + # -r requirements/test.txt # pytest # sphinx # tox -pkginfo==1.8.3 +pkginfo==1.9.6 # via twine -platformdirs==2.5.2 +platformdirs==3.8.1 # via virtualenv -pluggy==1.0.0 +pluggy==1.2.0 # via - # -r requirements\test.txt + # -r requirements/test.txt # pytest # tox py==1.11.0 - # via - # -r requirements\test.txt - # pytest - # tox -pycodestyle==2.8.0 + # via tox +pycodestyle==2.10.0 # via flake8 -pyflakes==2.4.0 +pycparser==2.21 + # via cffi +pyflakes==3.0.1 # via flake8 -pygments==2.12.0 +pygments==2.15.1 # via - # -r requirements\docs.txt + # -r requirements/docs.txt # readme-renderer # rich # sphinx -pyparsing==3.0.9 +pytest==7.4.0 # via - # -r requirements\docs.txt - # -r requirements\test.txt - # packaging -pytest==7.1.2 - # via - # -r requirements\test.txt + # -r requirements/test.txt # pytest-cov -pytest-cov==3.0.0 - # via -r requirements\test.txt -pytz==2022.1 +pytest-cov==4.1.0 + # via -r requirements/test.txt +pytz==2023.3 # via - # -r requirements\docs.txt + # -r requirements/docs.txt # babel -pywin32-ctypes==0.2.0 - # via keyring pyyaml==6.0 # via - # -r requirements\docs.txt + # -r requirements/docs.txt # sphinx-autoapi -readme-renderer==35.0 +readme-renderer==40.0 # via twine -requests==2.28.1 +requests==2.31.0 # via - # -r requirements\docs.txt + # -r requirements/docs.txt # requests-toolbelt # sphinx # twine -requests-toolbelt==0.9.1 +requests-toolbelt==1.0.0 # via twine rfc3986==2.0.0 # via twine -rich==12.5.1 +rich==13.4.2 # via twine +secretstorage==3.3.3 + # via keyring six==1.16.0 # via # bleach # livereload # tox - # virtualenv snowballstemmer==2.2.0 # via - # -r requirements\docs.txt + # -r requirements/docs.txt # sphinx -soupsieve==2.3.2.post1 +soupsieve==2.4.1 # via - # -r requirements\docs.txt + # -r requirements/docs.txt # beautifulsoup4 sphinx==3.5.4 # via - # -r requirements\docs.txt + # -r requirements/docs.txt # furo # sphinx-autoapi # sphinx-autobuild @@ -198,80 +197,81 @@ # sphinx-panels # sphinx-version-warning sphinx-autoapi==1.8.4 - # via -r requirements\docs.txt + # via -r requirements/docs.txt sphinx-autobuild==2021.3.14 - # via -r requirements\dev.in -sphinx-copybutton==0.5.0 - # via -r requirements\docs.txt + # via -r requirements/dev.in +sphinx-copybutton==0.5.2 + # via -r requirements/docs.txt sphinx-issues==3.0.1 - # via -r requirements\docs.txt + # via -r requirements/docs.txt sphinx-panels==0.6.0 - # via -r requirements\docs.txt + # via -r requirements/docs.txt sphinx-version-warning==1.1.2 - # via -r requirements\docs.txt -sphinxcontrib-applehelp==1.0.2 + # via -r requirements/docs.txt +sphinxcontrib-applehelp==1.0.4 # via - # -r requirements\docs.txt + # -r requirements/docs.txt # sphinx sphinxcontrib-devhelp==1.0.2 # via - # -r requirements\docs.txt + # -r requirements/docs.txt # sphinx -sphinxcontrib-htmlhelp==2.0.0 +sphinxcontrib-htmlhelp==2.0.1 # via - # -r requirements\docs.txt + # -r requirements/docs.txt # sphinx sphinxcontrib-jsmath==1.0.1 # via - # -r requirements\docs.txt + # -r requirements/docs.txt # sphinx sphinxcontrib-qthelp==1.0.3 # via - # -r requirements\docs.txt + # -r requirements/docs.txt # sphinx sphinxcontrib-serializinghtml==1.1.5 # via - # -r requirements\docs.txt + # -r requirements/docs.txt # sphinx -toml==0.10.2 - # via tox tomli==2.0.1 # via - # -r requirements\test.txt + # -r requirements/test.txt # coverage # mypy # pytest -tornado==6.2 + # tox +tornado==6.3.2 # via livereload -tox==3.25.1 - # via -r requirements\dev.in -twine==4.0.1 - # via -r requirements\dev.in -typing-extensions==4.3.0 +tox==3.28.0 + # via -r requirements/dev.in +twine==4.0.2 + # via -r requirements/dev.in +typing-extensions==4.7.1 # via - # -r requirements\docs.txt + # -r requirements/docs.txt # astroid # mypy # rich -unidecode==1.3.4 +unidecode==1.3.6 # via - # -r requirements\docs.txt + # -r requirements/docs.txt # sphinx-autoapi -urllib3==1.26.10 +urllib3==2.0.3 # via - # -r requirements\docs.txt + # -r requirements/docs.txt # requests # twine -virtualenv==20.14.1 +virtualenv==20.23.1 # via tox webencodings==0.5.1 # via bleach -wrapt==1.14.1 +wrapt==1.15.0 # via - # -r requirements\docs.txt + # -r requirements/docs.txt # astroid -zipp==3.8.1 - # via importlib-metadata +zipp==3.16.1 + # via + # importlib-metadata + # importlib-resources # The following packages are considered to be unsafe in a requirements file: # setuptools diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cloup-2.1.1/requirements/docs.in new/cloup-2.1.2/requirements/docs.in --- old/cloup-2.1.1/requirements/docs.in 2023-06-03 16:20:28.000000000 +0200 +++ new/cloup-2.1.2/requirements/docs.in 2023-07-13 20:09:42.000000000 +0200 @@ -1,7 +1,8 @@ sphinx <5 -sphinx-autoapi -furo -sphinx-panels -sphinx_copybutton -sphinx-version-warning -sphinx-issues +sphinx-autoapi ~= 1.8.4 +furo == 2021.4.11b34 +sphinx-panels ~= 0.6.0 +sphinx_copybutton ~= 0.5.0 +sphinx-version-warning ~= 1.1.2 +sphinx-issues ~= 3.0.1 +jinja2 == 3.0.3 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cloup-2.1.1/requirements/docs.txt new/cloup-2.1.2/requirements/docs.txt --- old/cloup-2.1.1/requirements/docs.txt 2023-06-03 16:20:28.000000000 +0200 +++ new/cloup-2.1.2/requirements/docs.txt 2023-07-13 20:09:42.000000000 +0200 @@ -1,67 +1,54 @@ # -# This file is autogenerated by pip-compile -# To update, run: +# This file is autogenerated by pip-compile with Python 3.8 +# by the following command: # -# pip-compile requirements/docs.in +# pip-compile --resolver=backtracking requirements/docs.in # -alabaster==0.7.12 +alabaster==0.7.13 # via sphinx -astroid==2.12.2 +astroid==2.15.6 # via sphinx-autoapi -babel==2.10.3 +babel==2.12.1 # via sphinx -beautifulsoup4==4.11.1 +beautifulsoup4==4.12.2 # via furo -certifi==2022.6.15 +certifi==2023.5.7 # via requests -charset-normalizer==2.1.0 +charset-normalizer==3.2.0 # via requests -colorama==0.4.5 - # via sphinx docutils==0.16 # via # sphinx # sphinx-panels furo==2021.4.11b34 # via -r requirements/docs.in -idna==3.3 +idna==3.4 # via requests imagesize==1.4.1 # via sphinx jinja2==3.0.3 # via + # -r requirements/docs.in # sphinx # sphinx-autoapi -lazy-object-proxy==1.7.1 +lazy-object-proxy==1.9.0 # via astroid -markupsafe==2.1.1 +markupsafe==2.1.3 # via jinja2 -packaging==21.3 +packaging==23.1 # via sphinx -pygments==2.12.0 +pygments==2.15.1 # via sphinx -pyparsing==3.0.9 - # via packaging -pytz==2022.1 +pytz==2023.3 # via babel pyyaml==6.0 # via sphinx-autoapi -requests==2.28.1 +requests==2.31.0 # via sphinx snowballstemmer==2.2.0 # via sphinx -soupsieve==2.3.2.post1 +soupsieve==2.4.1 # via beautifulsoup4 -sphinx-autoapi==1.8.4 - # via -r requirements/docs.in -sphinx-copybutton==0.5.0 - # via -r requirements/docs.in -sphinx-issues==3.0.1 - # via -r requirements/docs.in -sphinx-panels==0.6.0 - # via -r requirements/docs.in -sphinx-version-warning==1.1.2 - # via -r requirements/docs.in sphinx==3.5.4 # via # -r requirements/docs.in @@ -71,11 +58,21 @@ # sphinx-issues # sphinx-panels # sphinx-version-warning -sphinxcontrib-applehelp==1.0.2 +sphinx-autoapi==1.8.4 + # via -r requirements/docs.in +sphinx-copybutton==0.5.2 + # via -r requirements/docs.in +sphinx-issues==3.0.1 + # via -r requirements/docs.in +sphinx-panels==0.6.0 + # via -r requirements/docs.in +sphinx-version-warning==1.1.2 + # via -r requirements/docs.in +sphinxcontrib-applehelp==1.0.4 # via sphinx sphinxcontrib-devhelp==1.0.2 # via sphinx -sphinxcontrib-htmlhelp==2.0.0 +sphinxcontrib-htmlhelp==2.0.1 # via sphinx sphinxcontrib-jsmath==1.0.1 # via sphinx @@ -83,13 +80,13 @@ # via sphinx sphinxcontrib-serializinghtml==1.1.5 # via sphinx -typing-extensions==4.3.0 +typing-extensions==4.7.1 # via astroid -unidecode==1.3.4 +unidecode==1.3.6 # via sphinx-autoapi -urllib3==1.26.10 +urllib3==2.0.3 # via requests -wrapt==1.14.1 +wrapt==1.15.0 # via astroid # The following packages are considered to be unsafe in a requirements file: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cloup-2.1.1/requirements/test.txt new/cloup-2.1.2/requirements/test.txt --- old/cloup-2.1.1/requirements/test.txt 2023-06-03 16:20:28.000000000 +0200 +++ new/cloup-2.1.2/requirements/test.txt 2023-07-13 20:09:42.000000000 +0200 @@ -1,33 +1,25 @@ # -# This file is autogenerated by pip-compile -# To update, run: +# This file is autogenerated by pip-compile with Python 3.8 +# by the following command: # -# pip-compile requirements/test.in +# pip-compile --resolver=backtracking requirements/test.in # -atomicwrites==1.4.1 - # via pytest -attrs==21.4.0 - # via pytest -colorama==0.4.5 - # via pytest -coverage[toml]==6.4.2 +coverage[toml]==7.2.7 # via pytest-cov -iniconfig==1.1.1 +exceptiongroup==1.1.2 # via pytest -packaging==21.3 +iniconfig==2.0.0 # via pytest -pluggy==1.0.0 +packaging==23.1 # via pytest -py==1.11.0 +pluggy==1.2.0 # via pytest -pyparsing==3.0.9 - # via packaging -pytest-cov==3.0.0 - # via -r requirements/test.in -pytest==7.1.2 +pytest==7.4.0 # via # -r requirements/test.in # pytest-cov +pytest-cov==4.1.0 + # via -r requirements/test.in tomli==2.0.1 # via # coverage diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cloup-2.1.1/tests/test_commands.py new/cloup-2.1.2/tests/test_commands.py --- old/cloup-2.1.1/tests/test_commands.py 2023-06-03 16:20:28.000000000 +0200 +++ new/cloup-2.1.2/tests/test_commands.py 2023-07-13 20:09:42.000000000 +0200 @@ -120,3 +120,60 @@ @root.command def subcommand(): pass + + +def test_group_command_class_is_used_to_create_subcommands(runner): + class CustomCommand(cloup.Command): + + def __init__(self, *args, **kwargs): + kwargs.setdefault("context_settings", {"help_option_names": ("--help", "-h")}) + super().__init__(*args, **kwargs) + + class CustomGroup(cloup.Group): + command_class = CustomCommand + + @cloup.group("cli", cls=CustomGroup) + def my_cli(): + pass + + @my_cli.command() + def subcommand(): + pass + + assert isinstance(subcommand, CustomCommand) + + res = runner.invoke(my_cli, ["subcommand", "--help"]) + assert res.output == reindent(""" + Usage: cli subcommand [OPTIONS] + + Options: + -h, --help Show this message and exit. + """) + + +def test_group_class_is_used_to_create_subgroups(runner): + class CustomGroup(cloup.Group): + group_class = type + + class OtherCustomGroup(cloup.Group): + group_class = cloup.Group + + @cloup.group("cli", cls=CustomGroup) + def my_cli(): + pass + + @my_cli.group() + def sub_group(): + pass + + @my_cli.group(cls=OtherCustomGroup) + def other_group(): + pass + + @other_group.group() + def other_sub_group(): + pass + + assert isinstance(sub_group, CustomGroup) + assert isinstance(other_group, OtherCustomGroup) + assert isinstance(other_sub_group, cloup.Group)