A python framework to write large CLIs. The concept is to automagically derive CLI commands and args based on the object graph of a callable class that implements a CLI command (command name is derived from the class name). It uses argparse to create the CLI parser and pinject as the Dependency_Injection engine. You implement a class - e.g.: DoSomething
- and that generates the name of a subcommand - e.g: do-something
. Then, based on the dependencies of class DoSomething
, we will derive the arguments, e.g.: if DoSomething
depends on Dependency
, which in turn declares __args__ = [bigcli.arg('--option', required=False, help='help')]
(add_argument method from argparse), then command do-something
will have a '--option' argument.
In theory, the auto-generation of arguments should enables and encourage the reuse of internal components for rapid development of consistent and testable rich CLIs, especially those that operate platforms.
- Free software: MIT license
- Documentation: https://bigcli.readthedocs.io.
#!/usr/bin/env python
import bigcli
class Dependency(object):
__args__ = [
bigcli.arg('--option') # short for ``lambda p: p.add_argument('--option')``
]
def __init__(self, args):
self.option = args.option
class Command(object):
__parent__ = 'sub-command'
__depends_on__ = [Dependency]
def __init__(self, dependency):
self.dependency = dependency
def __call__(self):
print "dependency option: {}".format(self.dependency.option)
if __name__ == "__main__":
bigcli.BigCli(commands=[Command]).execute()
# $ ./example.py sub-command command --option value
# > dependency option: value
- Auto generates parsers and commands using the
__depends_on__
and__args__
attributes. - Supports adding single subcommand using the
__parent__ = 'subcommand'
attribute.
- Only supports python 2.7 because pinject only supports python 2.7.
- Class names should have more than a single letter (pinject know issue, not documented anywhere AFAIK).
This package was created with Cookiecutter and the audreyr/cookiecutter-pypackage project template.