Features
- Argparse friendly:
- Reuse as much as possible from argparse, but allow a new modular way to built CLI.
- If you know argparse, then you already know how to use clak.
- Same API:
argparse.ArgumentParser()
becomes class MyApp(Parser):
.add_argument(...)
becomes dest = Argument(...)
.add_subparser(...)
becomes subcmd1 = SubCommand(...)
- Extended API:
.add_argument("--option", "o", help="Optional argument")
=> option = Opt("--option", "o", help="Optional argument")
.add_argument("param", help="Positional argument")
=> param = Arg(help="Positional argument")
.add_suparser(...)
=> subcmd1 = Cmd(ChildrenParserClass, help="Subcommand help")
- Class based approach:
- Use Python class to provide declarative command line.
- Since we use class, we can take advantage of Python inheritance to create CLI.
- Including organizing command in a tree structure.
- Inherit and share settings among different class, to allow maximum reusability.
- Hide internal argparse implementation from user, so you can focus on your app.
- Build git-like CLI with ease
- Rely on arparse subparser functionality.
- Pythonic class based approach to represent.
- Each subcommands are
Parser
instances, referenced via the SubCommand
field.
- Easy sub-command discovery
- All possible command are show in the root help
- All subcommands display indiviudal and customizable help message.
- Modular components and reusable components:
- Help:
- Comprehensive help message with command tree display.
- Manage
--help
and -h
flags.
- Easily change usage, description or epilog
- Logging:
- Configure and enable Basic Logger
- Provide per Node logger
- Provide
--verbose
and -v,-vv,-vvv
flags
- Config:
- Use XDG Base Directory Specification to provide config files and directory paths.
- Load yaml, json, toml, ini files easily
- Completion:
- Provide
completion
or --complete
flag to generate completion script.
- Support most common shell via the
argcomplete
library.
- More to come ...
- Environment var support
- Automatic app config reader/writer
- Build your own:
- Reuse your existing code, your favorite CLI options, put them in a library and ship it.