NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #4944 most downloaded on PyPI
Adds features to Click: option groups, constraints, subcommand sections and help themes.
Last release 22 days ago
12 Sep 2026
Release timing varies
gaps range from 2 weeks to 12 months
Most releases are documented
notes for 40 of 47 stable releases
Nothing withdrawn
no release was ever pulled
7 years old
47 releases · first in 2020
One column per quarter.
Cloup follows semantic versioning rigorously: any known breaking change causes a major-version bump, even when it is unlikely to affect most users. Ap…
This release realigns Cloup with Click 8.5, removes the compatibility layers accumulated across the Click 8.1-8.4 line, and hands a few long-standing Cloup features back to Click now that Click implements them itself. The headline addition is that Cloup now re-exports Click's public top-level namespace, so most applications can import from cloup alone.
Cloup follows semantic versioning rigorously: any known breaking change causes a major-version bump, even when it is unlikely to affect most users. Apart from the new minimum Python and Click versions, most projects should be able to upgrade from Cloup 3.x without changing their code.
This release also includes a comprehensive overhaul of the development tooling. See the final section if you contribute to Cloup.
>= 8.1.0, < 9.0). The compatibility code for older Click versions has been removed. (#219)Apart from the new minimum Python and Click versions, no supported public calling interface has been removed or narrowed. The intentional API-level compatibility changes affect subclasses and method overrides:
Command.deprecated and Group.deprecated now accept bool | str. Subclasses that narrow this attribute or the corresponding constructor argument to bool should widen their annotation. (#212)HelpFormatter.write_dl() now accepts an Iterable of rows instead of a Sequence, matching Click. Callers are unaffected because every Sequence is an Iterable, but an override annotated with Sequence is now narrower than the base method. Such overrides should accept Iterable and materialize it first if they need to traverse the rows more than once. (#214)HelpTheme.dark() and HelpTheme.light() are now class methods rather than static methods, and HelpTheme.with_() returns Self. Existing calls are unaffected. Subclasses overriding a preset should use @classmethod to satisfy type checkers and preserve the subclass type.Some uncommon patterns can observe additional compatibility changes even though no supported function or class calling convention is broken:
cloup.Argument is now an alias of click.Argument, so isinstance(arg, cloup.Argument) matches every Click argument. Code that used this check to distinguish Cloup's former argument subclass from a plain Click argument should be updated.from cloup import * no longer binds _version or warnings. They remain available as cloup._version and cloup.warnings, and cloup.__version__ is unchanged.cloup._params.GroupedOption has been removed. It has not been available as cloup.GroupedOption since v0.14.0 and was never visible to type checkers; use cloup.Option.(DEPRECATED), instead of the former (Deprecated) prefix. Tests that assert exact help output may need updating.Cloup now re-exports Click's public top-level namespace. Public Click core classes, decorators, exceptions, parameter types, terminal helpers, and utilities are available from cloup and included in cloup.__all__, while Cloup's enhanced implementations intentionally replace the corresponding Click symbols. Click's lazily exposed deprecated names (BaseCommand, MultiCommand, OptionParser, get_binary_stream, and get_text_stream) are mirrored without emitting warnings merely from importing Cloup.
Command decorators work without parentheses. @cloup.command is now equivalent to @cloup.command(), matching Click, and the same applies to cloup.group, Group.command, and Group.group.
@cloup.command
def cli():
...The cls argument can be passed positionally to command and group decorators, matching Click:
@cloup.command("cli", CustomCommand)
def cli():
...Commands, groups, and arguments accept a string for deprecated. A string produces a custom label such as (DEPRECATED: use new-command instead), while deprecated=True continues to produce (DEPRECATED). (#212, #223)
cloup.Argument now delegates to Click. It is an alias of click.Argument, which natively supports argument help and deprecation in Click 8.5. The @cloup.argument decorator remains available with more detailed annotations, and Cloup's positional-argument help section continues to work as before.
Subcommand suggestions now use Click's NoSuchCommand. Aliases participate in the suggestions, the exception exposes the possible matches, and message formatting follows Click.
A wrapped option-group constraint is now separated from the option list that follows it by a blank line. (#208)
ArgumentKwargs and OptionKwargs are new public TypedDicts. They document the standard arguments accepted by @argument and @option, improve IDE completion, and allow type checkers to report misspelled or invalid keyword arguments. Custom parameter classes can still accept their own additional keywords.
HelpTheme.dark(), HelpTheme.light(), and HelpTheme.with_() now preserve subclasses. with_() also forwards additional keyword arguments to dataclasses.replace(), allowing subclasses to define and replace their own fields.
click.Argument or a custom subclass no longer lose their help text in Cloup's argument help section. (#210, #223)The following fixes are mostly refinements to Cloup's public typing contract and alignment with Click 8.5. They are unlikely to affect most users:
Style remains hashable after it has been called. Previously, its internal cache mutated a frozen dataclass field into an unhashable dictionary. The cache and its private field have been removed. (#224)HelpFormatter.write_dl() signature was aligned to Click one and now accepts any Iterable of rows, not necessarily a Sequence of rows. (#214)Option.get_help_record() implementations that return None, allowing an option subclass to omit itself from help output for reasons other than being hidden.HelpFormatter.write() now matches Click's keyword-compatible write(string="", *strings) signature while preserving Cloup's multi-string convenience.Style.fg and Style.bg now accept Click's complete color specification: int | tuple[int, int, int] | str | None. This fixes false type errors for 256-color and truecolor values. (#229)cls is supplied and expose the complete set of Cloup-specific group options. The formatter_settings annotation no longer advertises a mutable default.Option.group is now visible to static type checkers.get_current_context() now mirrors Click's Literal overload, so silent=False produces a non-optional Context; pass_context() also preserves the wrapped callback's parameter and return types._params.py are now inline rather than stored in a shadowing _params.pyi. This ensures the implementation itself is type-checked and makes its complete public surface visible to type checkers and generated API documentation.Most of the changes in this release are not user-visible: the development, packaging, documentation, and CI infrastructure has been extensively modernized. CONTRIBUTING.rst has been rewritten for the new workflow and is the best starting point for an existing checkout or open pull request.
cloup/ to a src/cloup/ layout. Open pull requests that modify package sources will need to be rebased accordingly. (#220)setup.py and setup.cfg have been removed; project metadata and build configuration now live in pyproject.toml. (#206)pylock.code.toml, pylock.docs.toml, and pylock.package.toml._params.pyi has been removed in favor of inline types so static checkers and AutoAPI inspect the same implementation.hatch.toml, and the Makefile has been replaced by Task configuration in taskfile.yml. Run task --list to list the available commands.click == 8.5.* environment on Python 3.14. task test-envs:upgrade-click refreshes Click in existing environments.typing imports and unnecessary quoted annotations; replaced percent formatting with f-strings; and organized imports.task typing runs Pyrefly first and then Mypy, while the full workflows run both checkers across every compatibility environment.@override.tests/test_typing.py and tests/test_namespace.py modules protect the public typing contract and Click namespace re-export, including calls expected to be rejected.ci.yml, and all YAML files use the .yml extension._version.py module is excluded from coverage.latest-supported to reflect Cloup's < 9 upper bound.sphinx-panels has been replaced by sphinx-design, with accompanying template and CSS fixes.task docs:serve now watches docs/_static/styles, so stylesheet changes trigger live rebuilds.AGENTS.md documents the repository's sources of truth and expected development workflow. YAML naming, TOML editor settings, and local-tool ignore rules have also been standardized.Full Changelog: v3.1.0...v4.0.0
Fix type error related to checking if Command is a MultiCommand (deprecated since Click 8.2) (see #202 ).
executable kwarg to click.Path, a kwarg added in Click 8.1.Full Changelog: v3.0.9...v3.1.0
fix for the click. version deprecation warning by @cav71 in #192
Add show_subcommand_aliases to overloads for group by @ntessman-capsule in #191
Full Changelog: v3.0.7...v3.0.8
Fix: constraints not working with options having more than 2 names by @tylerduffin and @janluke in #188
Full Changelog: v3.0.6...v3.0.7
Remove support for EOL Python version (3.7) by @ulgens in #179
make_metavar() takes a context parameter now by @ppentchev in #186Full Changelog: v3.0.5...v3.0.6
Allow to set dunder attributes in FrozenSpaceMeta to solve incompatibility with autodoc by @janluke in #178
Full Changelog: v3.0.4...v3.0.5
Fix: command alias were ignored when subcommands were passed as argument to Group() by @janluke in #173
Redefine click.pass_context and click.get_current_context to use cloup.Context in place of click.Context by @oeko2002 in #171
click.pass_context and click.get_current_context to use cloup.Context in place of click.Context by @oeko2002 in #171Full Changelog: v3.0.2...v3.0.3
Truncate help text to the first form feed, like click by @pocek in #169
<!-- Release notes generated using configuration in .github/release.yaml at v3.0.1 -->
<!-- Release notes generated using configuration in .github/release.yaml at v3.0.1 -->
Constraint.__getattr__ was returning None instead of raising AttributeError by @janluke in https://github.com/janluke/cloup/pull/167.
copy.copy() and copy.deepcopy() with Constraint objects (#166).Full Changelog: https://github.com/janluke/cloup/compare/v3.0.0...v3.0.1
The breaking change should not affect anyone but I have to increase the major version anyway.
<!-- Release notes generated using configuration in .github/release.yaml at v3.0.0 -->
The breaking change should not affect anyone but I have to increase the major version anyway.
HelpTheme as dataclass rather than NamedTuple by @janluke in https://github.com/janluke/cloup/pull/163Full Changelog: https://github.com/janluke/cloup/compare/v2.1.2...v3.0.0
<!-- Release notes generated using configuration in .github/release.yaml at v2.1.2 -->
<!-- Release notes generated using configuration in .github/release.yaml at v2.1.2 -->
Group.command_class and Group.group_class when creating subcommands by @janluke in https://github.com/janluke/cloup/pull/162Full Changelog: https://github.com/janluke/cloup/compare/v2.1.1...v2.1.2
<!-- Release notes generated using configuration in .github/release.yaml at v2.1.1 -->
<!-- Release notes generated using configuration in .github/release.yaml at v2.1.1 -->
heading style was mistakenly applied to the space after "Usage:". This was a problem when using underlined headings: the space got underlined too. (fixed by @janluke in https://github.com/janluke/cloup/pull/158)Full Changelog: https://github.com/janluke/cloup/compare/v2.1.0...v2.1.1
Use the same (Deprecated) label as in Click by @kdeldycke in https://github.com/janluke/cloup/pull/153
<!-- Release notes generated using configuration in .github/release.yaml at v2.1.0 -->
(Deprecated) label as in Click by @kdeldycke in https://github.com/janluke/cloup/pull/153auto_envvar_prefix param to Context.settings method by @alexreg in https://github.com/janluke/cloup/pull/147Full Changelog: https://github.com/janluke/cloup/compare/v2.0.0...v2.1.0
Nothing published for this version
_(Not really a breaking change but some people may consider it one)_ Rename __constraints attribute to __cloup_constraints__ by @pocek in https://gith…
<!-- Release notes generated using configuration in .github/release.yaml at v2.0.0 -->
sorted attribute of Section to is_sorted by @alexreg in https://github.com/janluke/cloup/pull/142__constraints attribute to __cloup_constraints__ by @pocek in https://github.com/janluke/cloup/pull/132__constraints attribute to __cloup_constraints__ by @pocek in https://github.com/janluke/cloup/pull/132sorted attribute of Section to is_sorted by @alexreg in https://github.com/janluke/cloup/pull/142Full Changelog: https://github.com/janluke/cloup/compare/v1.0.2...v2.0.0
Skip constraints checking when --help is passed by @janluke in https://github.com/janluke/cloup/pull/130
--help is passed by @janluke in https://github.com/janluke/cloup/pull/130Full Changelog: https://github.com/janluke/cloup/compare/v1.0.1...v1.0.2
Show a helpful error message when trying to use command decorators without parenthesis by @janluke in https://github.com/janluke/cloup/pull/128
Show a helpful error message when some tries to use command decorators without parenthesis. 128
Drop support for Python 3.6. Python 3.6 ha reached end-of-life in Dec 2021 and it’s not officially supported by Click 8. From https://pypistats.org/pa
dataclasses backport package and using a compatible version of Click.Full Changelog: https://github.com/janluke/cloup/compare/v0.15.1...v1.0.0
Drop support for Python 3.6. Python 3.6 ha reached end-of-life in Dec 2021 and it's not officially supported by Click 8. From https://pypistats.org/packages/cloup, I can see that about 37% of people are still using Python 3.6. If you can't upgrade, you should still be able to use Cloup by installing the dataclasses backport package and using a compatible version of Click.
Drop support for Click 7.
Run tests on Python 3.10.
Work around Click bug: make decorators returned by @argument reusable (and more) by @janluke in https://github.com/janluke/cloup/pull/124
@argument reusable (and more) by @janluke in https://github.com/janluke/cloup/pull/124ParamTypeLike (https://github.com/janluke/cloup/commit/cecc0961e049577a035b5edab254801adf8ff0ce)Full Changelog: https://github.com/janluke/cloup/compare/v0.15.0...v0.15.1
Fix type of type argument of @option and @argument. Specifically, tuple types weren't correctly described.
Reimplement @argument and @option without calling the corresponding Click methods (124):
make decorators returned by @argument reusable by not relying on bugged Click implementation
remove unnecessary copy of **attrs in @option.
Rename Argument.help_record to get_help_record + fix typos by @alexreg in https://github.com/janluke/cloup/pull/116
Argument.help_record to get_help_record + fix typos by @alexreg in https://github.com/janluke/cloup/pull/116super().__init__ forward by @alexreg in https://github.com/janluke/cloup/pull/119Full Changelog: https://github.com/janluke/cloup/compare/v0.14.0...v0.15.0
Renamed Argument.help_record to Argument.get_help_record. 116
Fixed typos and some type annotations. 116
In mixins, moved call to super() at the beginning of __init__. 119.
Made Cloup pass mypy --strict. 122
The title of the default option group was "Other options" when the only other parameter help section was "Positional arguments". It's now "Options". 120
Renamed Argument.help_record to Argument.get_help_record.
In mixins, moved call to super() at the beginning of __init__. 119.
This release introduces some breaking changes, but nothing relevant for most users. You'll need to make changes if you've imported and used Cloup mixi…
help description for at least one of the arguments of a command/group. #113cloup.Group now extends cloup.Command and, as a consequence, supports option groups and constraints. #113GroupedOption is now an alias of cloup.Option.params Click argument to @command and @group signatures. This argument is supported only for click >= 8.1.0. See
https://github.com/pallets/click/pull/2203.This release introduces some breaking changes, but nothing relevant for most users. You'll need to make changes if you've imported and used Cloup mixins directly, for example in order to add support for option groups and constraints to Group (now you can just use cloup.Group).
BaseCommand was removed. This shouldn't cause any issue to anybody.cloup.Group extends cloup.Command, similarly as click.Group extends click.Command.OptionGroupMixin.format_options was renamed to format_params. This means you can't just mix it with click.Command to print help sections for option groups, you have to override format_help and call format_params.format_params doesn't call super().format_commands as format_options did: that's what Click does and Cloup (reluctantly) did. Now, instead, cloup.Command calls format_params in format_help and then, for multi-commands, calls format_commands directly.ConstraintMixin.format_help was removed. This means you can't just mix it with a click.Command to make it print the "Constraints" help section, you need to call format_constraints explicitly in your command format_help.On the website: https://cloup.readthedocs.io/en/v0.14.0/pages/changelog.html#v0-14-0-2022-05-09 All commits: https://github.com/janluke/cloup/compare/v0.13.1...v0.14.0
Fix: non normalized help and epilog text when using click 8.1.0 by @janluke in https://github.com/janluke/cloup/pull/110
Full Changelog: https://github.com/janluke/cloup/compare/v0.13.0...v0.13.1
Since version 8.1.0, Click does not normalize the command attributes help, short_help and epilog while Cloup assumed them to be normalized as in previous releases. This lead to Cloup printing non-normalized help and epilog text when using click >= 8.1.0.
Add utility functions for creating click.Path (using pathlib by default) by @janluke in https://github.com/janluke/cloup/pull/104
Full Changelog: https://github.com/janluke/cloup/compare/v0.12.1...v0.13.0
Add shortcuts for click.Path types which uses pathlib.Path as path_type by default: - cloup.path - cloup.dir_path (file_okay=False) - cloup.file_path (dir_okay=False)
Fix: when OptionGroupMixin is mixed with Group, subcommands weren't shown.
Fix: when OptionGroupMixin is mixed with Group, subcommands weren't shown.
Feature: when a subcommand is mistyped, show a “did you mean ?” suggestion.
<subcommand>?” suggestion.Feature: when a subcommand is mistyped, show "did you mean <subcommand>?".
Doc fixes.
No major changes in this release, just refinements.
No major changes in this release, just refinements.
repr() of RequireExactly(3): from RequireExactly(n=3) to RequireExactly(3).This is probably going to be the last release before v1.0.0.
Changelog: https://cloup.readthedocs.io/en/v0.10.0/pages/changelog.html#v0-10-0-2021-07-14
Changelog: https://cloup.readthedocs.io/en/v0.10.0/pages/changelog.html#v0-10-0-2021-07-14
New feature: subcommand aliases. 64 75
Command decorators: improvements to type hints and other changes (67):
mypy can now infer the exact type of the instantiated command based on the cls argument. --- Unfortunately, this required the use of @overload to work around a mypy limitation
in @group, allow cls to be any click.Group --- previously it had to be a subclass of cloup.Group
in Group.command and Group.group add type hints and make all arguments except name keyword-only. Technically this is a (minor) incompatibility with the click.Group superclass, but it's coherent with Cloup's @command and @group
add Cloup-specific arguments to the signature of @command; if the developer uses one of such arguments with a cls that doesn't support them, Cloup augments the resulting TypeError with extra information.
Export Click types from Cloup namespace for convenience. 72
In dark and light themes, the epilog is now left unstyled by default. 62
SectionMixin.add_section called super().add_command rather than self.add_command. This caused add_command in subclasses not to be called. 69
Fix Context.check_constraints_consistency not being propagated to descendant contexts. 74
In Group.command and Group.group all arguments except name are now keyword-only.
The name parameter/attribute of OptionGroup was renamed to title.
In SectionMixin (thus, in Group), added a ctx: Context attribute to make_commands_help_section and format_subcommand_name to support the show_subcommand_aliases setting.
Fixed bug: shell completion breaking because Cloup checking constraints despite ctx.resilient_parsing=True
ctx.resilient_parsing=TrueConstraintMixin: optgroup_constraints, param_constraints and all_constraints.Fixed bug: shell completion breaking because of Cloup checking constraints despite ctx.resilient_parsing=True
Added public attributes to ConstraintMixin: optgroup_constraints, param_constraints and all_constraints.
Cleaned up code and added other type hints (to internal code).
Docs fixes and improvements. Fixed dark theme styling.
You can now use constraints as decorators to avoid specifying parameters by name. [Breaking change]. #8
@command, @group, @argument and @option. #47, #50row_sep can now take a RowSepPolicy that decides whether to use a row separator (e.g. an empty line) for each definition list independently, e.g. based on the number of definitions taking multiple lines. #37require_any and require_one constraints (as aliases). #57error argument of Rephraser. Reusing the original error message to add extra info is easy now. #54You can find a much more detailed changelog on the website: https://cloup.readthedocs.io/en/stable/pages/changelog.html#v0-9-0-2021-06-30
Context.show_constraints not having effect because of wrong default for Command.show_constraint. 49
Command (OptionGroupMixin) raising error if params is not provided. 58
Add detailed type hints for @argument, @option, @command and @group. This should greatly improve IDE code completion. 47, 50
You can now use constraints as decorators (or @constrained_params) to constrain a group of "contiguous" parameters without repeating their names (see Constraints as decorators). This is a breaking change (see section below). 8
Added the require_any and require_one constraints (as aliases). 57
Simplify and improve the error argument of Rephraser (see Rephrasing constraints). 54
The formatter setting row_sep can now take a RowSepPolicy that decides whether and which row separator to use for each definition list independently, e.g. based on the number of definitions taking multiple lines (see: Row separators). 37
Added method format_subcommand_name(name, cmd) to SectionMixin to facilitate it combination with other Click extensions that override format_commands(). 59
@option_group and Section now show a better error message when one forgets to provide the name/title as first argument.
Fixed/improved some type hints and added others.
Calling a constraint -- previously a shortcut to the ~Constraint.check method -- now returns a decorator. Use the method Constraint.check to check a constraint inside a function. 8
The semantics of row_sep changed. Now, it defaults to None and must not end with \n, since the formatter writes a newline automatically after it. So, row_sep="" now corresponds to an empty line between rows. 41
In @command and @group make all arguments but name keyword-only. 46
In Context.settings and HelpFormatter.settings, use a MISSING constant instead of None as a flag for "empty" arguments. 40
Constraint.toggle_consistency_checks was replaced with a Context setting called check_constraints_consistency. 33
ConstraintViolated requires more parameters now. 54
Restyling to improve readability: increased font size and vertical spacing, decreased line width. Restyled the table of contents on the right side. Ecc.
Reorganized and rewrote several parts.
Nothing published for this version
Nothing published for this version
Cloup license changed from MIT to 3-clause BSD, the one used by Click.
Cloup license changed from MIT to 3-clause BSD, the one used by Click.
Added a donation button.
Cloup now uses its own HelpFormatter:
it supports alignment of multiple definition lists, so Cloup doesn't have to rely on a hack (padding) to align option groups and alike
it adds theming of the help page, i.e. styling of several elements of the help page
it has an additional way to format definition lists (implemented with the method write_linear_dl) that kicks in when the available width for the standard 2-column format is not enough (precisely, when the width available for the 2nd column is below formatter.col2_min_width)
it adds several attributes to fine-tune and customize the generated help: col1_max_width, col_spacing and row_sep
it fixes a couple of Click minor bugs and decides the column width of definition lists in a slightly smarter way that makes a better use of the available space.
Added a custom Context that:
uses cloup.HelpFormatter as formatter class by default
adds a formatter_settings attributes that allows to set the default formatter keyword arguments (the same argument can be given to a command to override these defaults). You can use the static method HelpFormatter.settings to create such a dictionary
allows to set the default value for the following Command/Group args:
align_option_groups,
align_sections
show_constraints
has a Context.setting static method that facilitates the creation of a context_settings dictionary (you get the help of your IDE).
Added a base class BaseCommand for Command and Group that:
extends click.Command
back-ports Click 8.0 class attribute context_class and set it to cloup.Context
adds the formatter_settings argument
Hidden option groups. An option group is hidden either if you pass hidden=True when you define it or if all its contained options are hidden. If you set hidden=True, all contained options will have their hidden attribute set to True automatically.
Adds the conditions AllSet and AnySet.
The and of two or more IsSet conditions returns an AllSet condition.
The or of two or more IsSet conditions returns an AnySet condition.
Changed the error messages of all_or_none and accept_none.
The following Click decorators are now exported by Cloup: argument, confirmation_option, help_option, pass_context, pass_obj, password_option and version_option.
These incompatible changes don't affect the most "external" API used by most clients of this library.
Formatting methods of OptionGroupMixin and SectionMixin now expects the formatter to be a cloup.HelpFormatter. If you used a custom click.HelpFormatter, you'll need to change your code if you want to use this release. If you used click-help-colors, keep in mind that the new formatter has built-in styling capabilities so you don't need click-help-colors anymore.
OptionGroupMixin.format_option_group was removed.
SectionMixin.format_section was removed.
The class MultiCommand was removed, being useless.
The OptionGroupMixin attribute align_option_groups is now None by default. Functionally, nothing changes: option groups are aligned by default.
The SectionMixin attribute align_sections is now None by default. Functionally, nothing changes: subcommand sections are aligned by default.
The ConstraintMixin attribute show_constraints is now None by default. Functionally, nothing changes: constraints are not shown by default.
Switch theme to furo.
Added section "Help formatting and theming".
Improved all sections.
Fixed a bug with & and | Predicate operators giving AttributeError when used.
Fixed a bug with & and | Predicate operators giving AttributeError when used.
Fixed the error message of accept_none which didn't include {param_list}.
Improved all_or_none error message.
Minor docs fixes.
In constraint errors, the way the parameter list is formatted has changed. Instead of printing a comma-separated list of single labels:
In constraint errors, the way the parameter list is formatted has changed. Instead of printing a comma-separated list of single labels:
each parameter is printed on a 2-space indented line and
both the short and long name of options are printed.
See the relevant commit.
Minor improvements to code and docs.
This patch release fixes some problems in the management and releasing of the package.
This patch release fixes some problems in the management and releasing of the package.
Add a py.typed file to ship the package with type hints (PEP 561).
Use setuptools-scm to automatically manage the version of the package and the content of the source distribution based on the git repository:
the source distribution now matches the git repository, with the only exception of _version.py, which is not tracked by git; it's generated by setuptools-scm and included in the package;
tox.ini and Makefile were updated to account for the fact that _version.py doesn't exist in the repository before installing the package.
The new attribute cloup.__version_tuple__ stores the version as a tuple (of at least 3 elements).
Removed the deprecated GroupSection as previously announced. Use the new name instead: Section.
Slightly improved return type (hint) of command decorators.
Minor refactoring of ConstraintMixin.
Improved the documentation.
Removed the deprecated GroupSection as previously announced. Use the new name instead: Section.
In Group.group() and Group.command, the argument section was moved after the cls argument so that the signatures are now fully compatible with those of the parent class (the Liskov substitution principle is now satisfied). If you (wisely) passed section and cls as keyword arguments in your code, you don't need to change anything.
Added a subpackage for defining constraints on parameters groups (including OptionGroup's).
Drop support to Python 3.5.
Added a subpackage for defining constraints on parameters groups (including OptionGroup's).
The code for adding support to option groups was extracted to OptionGroupMixin.
Most of the code for adding support to subcommand sections was extracted to SectionMixin.
GroupSection was renamed as Section.
Migrated from TravisCI to GitHub Actions.
Nothing published for this version
Nothing published for this version
This is the last release officially supporting Python 3.5.
This is the last release officially supporting Python 3.5.
Changed the internal (non-public) structure of the package.
Minor code improvements.
New documentation (hosted by ReadTheDocs)
Tox, TravisCI, Makefile completely rewritten.
option_groups decorator now takes the list of options as positional arguments *options;
option_groups decorator now takes the list of options as positional arguments *options;Group.section decorator now takes the list of sections as positional arguments *sections;align_sections_help of Group (and group()) was renamed to align_sections;sorted_ of GroupSection.__init__() argument was renamed to sorted.option_group: you can pass the help argument
as 2nd positional argument.align_option_groups with default True).option_groups decorator now takes options as positional arguments *options;
Group.section decorator now takes sections as positional arguments *sections;
align_sections_help was renamed to align_sections;
GroupSection.__init__() sorted_ argument was renamed to sorted.
Additional signature for option_group: you can pass the help argument as 2nd positional argument.
Aligned option groups (option align_option_groups with default True).
More refactoring and testing.
Add possibility of organizing subcommands of a cloup.Group in multiple help sections (#1).
cloup.Group in multiple help sections (#1).CloupCommand and CloupGroup resp. to just Command and Group.[Feature] Add possibility of organizing subcommands of a cloup.Group in multiple help sections.
Various code improvements.
rename CloupCommand and CloupGroup resp. to just Command and Group.
Nothing published for this version
Nothing published for this version
- First release on PyPI.
First release on PyPI.
First release on PyPI.
Contents
Changelog
v0.10.0 (2021-07-14)
New features and enhancements
Bug fixes
Breaking changes
v0.9.1 (2021-07-03)
v0.9.0 (2021-06-30)
Fixed bugs
New features and enhancements
Breaking changes
Docs
v0.8.1-2 (2021-05-25)
v0.8.0 (2021-05-19)
Project changes
New features and enhancements
Breaking changes
Docs
v0.7.1 (2021-05-02)
v0.7.0 (2021-03-24)
New features and enhancements
v0.6.1 (2021-03-01)
v0.6.0 (2021-02-28)
New features and enhancements
Breaking changes
v0.5.0 (2021-02-10)
Requirements
New features and enhancements
Deprecated
Project changes
v0.4.0 (2021-01-10)
Requirements
New features and enhancements
Project changes
v0.3.0 (2020-03-26)
Breaking changes
Other changes
v0.2.0 (2020-03-11)
v0.1.0 (2020-02-25)
Your coding agent can read these notes before it upgrades. Set up the MCP server →