Aliasing parameters#
In CLIs, it is common for options to have an alias allowing for quicker short-hand usage.
For instance, an option named --verbose
may be aliased as -v
.
Instead of manually specifying an alias with click.option()
, e.g.
import feud
from feud import click
@click.option("--verbose", "-v", help="Whether to print or not.", type=bool)
def my_command(*, verbose: bool = False):
"""A command that does some logging."""
feud.run(my_command)
You can use the alias()
decorator to do this, which also means you
do not have to manually provide help
or type
to click.option()
,
and can instead rely on type hints and docstrings.
import feud
@feud.alias(verbose="-v")
def my_command(*, verbose: bool = False):
"""A command that does some logging.
Parameters
----------
verbose:
Whether to print or not.
"""
feud.run(my_command)
Note
In the case of boolean flags such as --verbose
in this case, the --no-verbose
option will also have a corresponding --no-v
alias automatically defined.
API reference#
- feud.decorators.alias(**aliases)#
Alias command options.
Decorates a function by attaching command option alias metadata, to be used at compile time to alias
click.Option
objects.Aliases may only be defined for command-line options, not arguments.
- Parameters:
**aliases (str | list[str]) – Mapping of option names to aliases. Option names must be keyword-only parameters in the decorated function signature.
- Return type:
Function decorated with command option alias metadata.
Examples
Aliasing a single option.
>>> import feud >>> @feud.alias(verbose="-v") ... def func(*, verbose: bool) -> bool: ... return verbose >>> feud.run(func, ["--verbose"], standalone_mode=False) True >>> feud.run(func, ["-v"], standalone_mode=False) True >>> feud.run(func, ["--no-verbose"], standalone_mode=False) False >>> feud.run(func, ["--no-v"], standalone_mode=False) False
Aliasing a single option with multiple aliases.
>>> import feud >>> @feud.alias(verbose=["-v", "-V"]) >>> def func(*, verbose: bool) -> bool: ... return verbose >>> feud.run(func, ["-v"], standalone_mode=False) True >>> feud.run(func, ["--no-v"], standalone_mode=False) False >>> feud.run(func, ["-V"], standalone_mode=False) True >>> feud.run(func, ["--no-V"], standalone_mode=False) False
Aliasing multiple options.
>>> import feud >>> from feud.typing import Counter >>> @feud.alias(verbose="-v", stringify="-s") ... def func(*, verbose: Counter, stringify: bool) -> int | str: ... return f"Verbose level: {verbose}" if stringify else verbose >>> feud.run(func, ["-vvvs"], standalone_mode=False) "Verbose level: 3" >>> feud.run(func, ["-v", "-v", "-v", "-s"], standalone_mode=False) "Verbose level: 3" >>> feud.run(func, ["-vvv", "--no-s"], standalone_mode=False) 3