Skip to main content

Adds features to AsyncClick: option groups, constraints, subcommand sections and help themes. A fork of Gianluca Gippetto's 'Cloup'.

Project description

Latest release on PyPI PyPI - Downloads Tests status Coverage Status Documentation Status (master branch)

AsyncCloup is a Cloup fork that works with AsyncClick <https://github.com/python-trio/asyncclick> instead of Click. This should be a drop-in change.

Cloup — originally from “Click + option groups” — enriches Click with several features that make it more expressive and configurable:

  • option groups and an (optional) help section for positional arguments

  • constraints, like mutually_exclusive, that can be applied to option groups or to any group of parameters, even conditionally

  • subcommand aliases

  • subcommands sections, i.e. the possibility of organizing the subcommands of a Group in multiple help sections

  • a themeable HelpFormatter that:

    • has more parameters for adjusting widths and spacing, which can be provided at the context and command level

    • use a different layout when the terminal width is below a certain threshold in order to improve readability

  • suggestions like “did you mean <subcommand>?” when you mistype a subcommand.

Moreover, Cloup improves on IDE support providing decorators with detailed type hints and adding the static methods Context.settings() and HelpFormatter.settings() for creating dictionaries of settings.

Cloup is statically type-checked with MyPy in strict mode and extensively tested against multiple versions of Python with nearly 100% coverage.

A simple example

from cloup import (
    HelpFormatter, HelpTheme, Style,
    command, option, option_group
)
from cloup.constraints import RequireAtLeast, mutually_exclusive

# Check the docs for all available arguments of HelpFormatter and HelpTheme.
formatter_settings = HelpFormatter.settings(
    theme=HelpTheme(
        invoked_command=Style(fg='bright_yellow'),
        heading=Style(fg='bright_white', bold=True),
        constraint=Style(fg='magenta'),
        col1=Style(fg='bright_yellow'),
    )
)

# In a multi-command app, you can pass formatter_settings as part
# of your context_settings so that they are propagated to subcommands.
@command(formatter_settings=formatter_settings)
@option_group(
    "Cool options",
    option('--foo', help='This text should describe the option --foo.'),
    option('--bar', help='This text should describe the option --bar.'),
    constraint=mutually_exclusive,
)
@option_group(
    "Other cool options",
    "This is the optional description of this option group.",
    option('--pippo', help='This text should describe the option --pippo.'),
    option('--pluto', help='This text should describe the option --pluto.'),
    constraint=RequireAtLeast(1),
)
def cmd(**kwargs):
    """This is the command description."""
    pass

if __name__ == '__main__':
    cmd(prog_name='invoked-command')
Basic example --help screenshot

If you don’t provide --pippo or --pluto:

Usage: invoked-command [OPTIONS]
Try 'invoked-command --help' for help.

Error: at least 1 of the following parameters must be set:
  --pippo
  --pluto

This simple example just scratches the surface. Read more in the documentation (links below).

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

asynccloup-3.0.8.1.tar.gz (230.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

asynccloup-3.0.8.1-py2.py3-none-any.whl (55.3 kB view details)

Uploaded Python 2Python 3

File details

Details for the file asynccloup-3.0.8.1.tar.gz.

File metadata

  • Download URL: asynccloup-3.0.8.1.tar.gz
  • Upload date:
  • Size: 230.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for asynccloup-3.0.8.1.tar.gz
Algorithm Hash digest
SHA256 9cf215a9e19cdb21a00148b39363ed19d42d06ed74cdf28d7a06530162c8dd4d
MD5 9733458868bf6a99eb94637305520e12
BLAKE2b-256 da6bded27eca82d36cff13bfd7d8c741043e3a76738cd4630c25b1f502981ca0

See more details on using hashes here.

File details

Details for the file asynccloup-3.0.8.1-py2.py3-none-any.whl.

File metadata

  • Download URL: asynccloup-3.0.8.1-py2.py3-none-any.whl
  • Upload date:
  • Size: 55.3 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for asynccloup-3.0.8.1-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 7a61ef63f62cf560a4e75619fe3575bcdf9149c9052e7bbbdd2d8fc8d8333ec6
MD5 b52206c488977cd732857f6c1bb45a61
BLAKE2b-256 4948bbaeca1e234a3f76b733e0cfdee71a4f2b8698ea82e0605a32e2e3f0f8b3

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page