Generate CLI ArgumentParser from a function signature.
Project description
func_argparse
Generate a nice command line interface for a list of functions or a module, leveraging your doc-strings and type annotations.
Never worry about your Argparser being out of sync with your code.
Try it with pip install func_argparse
.
Example
In a 'hello.py' file:
"""Say hello or goodbye to the user."""
import func_argparse
def hello(user: str, times: int = None):
"""Say hello.
Arguments:
user: name of the user
"""
print(f"Hello {user}" * (1 if times is None else times))
def bye(user: str, see_you: float = 1.0):
"""Say goodbye."""
print(f"Goodbye {user}, see you in {see_you:.1f} days")
if __name__ == "__main__":
func_argparse.main()
From CLI:
$ python hello.py hello --user gwenzek
Hello gwenzek
$ python hello.py hello --user gwenzek --times 2
Hello gwenzekHello gwenzek
$ python hello.py bye --user gwenzek --see_you 12.345
Goodbye gwenzek, see you in 12.3 days
$ python hello.py hello -u gwenzek -t 1
Hello gwenzek
$ python hello.py --help
usage: hello.py [-h] {hello,bye} ...
Say hello or goodbye to the user.
positional arguments:
{hello,bye}
hello Say hello.
bye Say goodbye.
optional arguments:
-h, --help show this help message and exit
$ python hello.py bye --help
usage: hello.py bye [-h] -u USER [-s SEE_YOU]
optional arguments:
-h, --help show this help message and exit
-u USER, --user USER
-s SEE_YOU, --see_you SEE_YOU
(default=1.0)
Gotchas
func_argparse
generate classicsargparse.Argparser
you can mix and match them with hand-written parsers.func_argparse.main()
create one CLI command by "public" function from a file / module.- Use
func_argparse.single_main(my_main)
if you only have one entry point in your file. - All functions arguments need a type hint.
- Arguments without default value will be marked as required.
- A boolean argument
a
will generate two flags:--a
and--no-a
. - A boolean argument with no default value will be assumed to default to
False
. - The first argument starting with letter
a
will also be available with the flag-a
. - The function docstring will be parsed to extract the help messages.
- First line is used as help message for the function
- First line starting with
a
will be used to extract the documentation for argumenta
. Spaces, dashes and columns will be stripped before displaying.
- Some kind of functions (notably builtin and C-function) can't be inspected and we can't generate Argparser for them.
- You can't have a function with an argument named
__command
when usingmain
ormulti_parser
. - If you don't like the generated parser, you can modify it using
override
function.
Alternatives
Here are other alternatives you might be interested in.
- argparse: the builtin library upon which
func_argparse
is built. Grants a very precise control on the CLI but is a bit verbose and prone to go out-of-sync with the code. - fire: also generates parser with introspection but doesn't leverage types. So the types of arguments is determined at parse time. Can generate completion files.
- click: uses function annotations to generate the CLI.
Contibuting
All contributions are welcome.
Code formatting is enforced with isort
, black
.
Types annotations are required for the main module and checked with mypy
.
Tests are run with pytest
.
Run pip install ".[dev]"
to install the required modules
Run ./tools.sh all
to format your code and run mypy
and pytest
.
TODOs
- Add all parameters from
add_argument
tooverride
- Chose one from Circle CI and Github Workflows
- Make it easy to parse a comma separated list of argument
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
Built Distribution
File details
Details for the file func_argparse-1.1.1.tar.gz
.
File metadata
- Download URL: func_argparse-1.1.1.tar.gz
- Upload date:
- Size: 7.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.15.0 pkginfo/1.4.2 requests/2.22.0 setuptools/40.6.3 requests-toolbelt/0.9.1 tqdm/4.28.1 CPython/3.7.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a61bafc642c0ba711c51567fcd860526ec40de72bfafccad9c2a9b49c166166b |
|
MD5 | 85b39d012b4d9016b470ce9b02a891a4 |
|
BLAKE2b-256 | 98a479adbdacbfbaea11efb7dc2cf91e5db2e3fb56b17e5eb27bb0c82a9f0111 |
File details
Details for the file func_argparse-1.1.1-py3-none-any.whl
.
File metadata
- Download URL: func_argparse-1.1.1-py3-none-any.whl
- Upload date:
- Size: 9.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.15.0 pkginfo/1.4.2 requests/2.22.0 setuptools/40.6.3 requests-toolbelt/0.9.1 tqdm/4.28.1 CPython/3.7.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0a530c93ff18e838e486ced9e6b8b606a1cb184627f78d88e978c2e099426bf5 |
|
MD5 | 590051efaa76b30705824b5d832fb28c |
|
BLAKE2b-256 | 2e37e0a393069282714a357558734d6a11f989ef8a19a9939926ff35d75e22d7 |