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)

Reply via email to