Adds features to Click: option groups, constraints, subcommand sections and help themes.
Project description
Cloup — originally from “Click + option groups” — enriches Click with several features that make it more expressive and configurable:
option groups
constraints, like mutually_exclusive, that can be applied to any group of parameters, even conditionally
subcommand aliases
subcommands sections, i.e. the possibility to organize 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 extensively tested and documented. Tests are run against multiple versions of Python (>=3.6) and Click (>=7.2).
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')
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
Supporting the project
Designing, testing and documenting a library takes a lot of time. The most concrete way to show your appreciation and to support future development is by donating. Any amount is appreciated.
Apart from that, you can help the project by starring it on GitHub, reporting issues, proposing improvements and contributing with your code!
Links
Documentation (release | development)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for cloup-0.13.0-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2b389c85f26e910a27c491ffa8ebc41a79431a320b8f1a49b1614fdd2f2b43cf |
|
MD5 | 55f5b26c5318ef19510da6499a10aa7b |
|
BLAKE2b-256 | 572c497ebc48cbf7ffb83327cc418c4b28eb3a30d47a25d8ec1bbb98ec67601f |