Reference
cli
cli is the main API of minicli, it's a decorator to help you create
argparse command easily.
You basically can call it in three ways — without any argument, with only kwargs,
with a name argument and kwargs:
@cli (no *args, no **kwargs)
In this case, minicli will extrapolate the command name and the arguments names
and types for the decorated function. Basically, all *args will be mapped to
positional arguments, and **kwargs will be mapped to optional ones.
For example, this will generate a command called mycommand, with one
positional argument named action, and one optional argument of type int
named count:
@cli
def mycommand(action, count=10):
pass
This is the more common usage of @cli. But sometimes, you want better
control. This is done by passing argparse arguments to @cli, see below.
Note: @cli() will also work.
Note: underscores (_) are replaced by dashes (-) in command names and
arguments
@cli(**kwargs) (kwargs, but no args)
Those kwargs will override the kwargs passed to
add_parser.
For example, you may want to override the command name (maybe because your are using a python reserved keyword, or you want to prevent a name clash):
@cli(name='next')
def next_():
# You can use `next` as command name now.
cli(name, **kwargs)
Those kwargs will override the kwargs passed to
add_argument
for the argument name.
For example you may want to control the choices of a mandatory positional argument:
@cli('direction', choices=['top', 'down', 'left', 'right'])
def go_to(direction):
pass
You can chain the calls to @cli as needed:
@cli('speed', choices=range(5, 10))
@cli('direction', choices=['top', 'down', 'left', 'right'])
def go_to(direction, speed: int):
pass
See how-to guides for concrete usage examples.
run
run will call argparse for you. You generally want to call it like this:
if __name__ == '__main__':
run()
Global parameters
Any kwarg passed to run will be turned to a global parameter.
run(hostname='example.com')
See How to deal with global parameters.
wrap
wrap is a decorator that can turn any function into a wrapper that will be
called before and after the command.
@wrap
def my_wrapper():
print('before') # This will be called before the command
yield
print('after') # This will be called after the command
wrap can also be used with async functions.
wrap can use any global parameters, see
How to create a global DB connection.