bigcli¶
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.
Minimal example:¶
#!/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
Features (see tests for example)¶
- Auto generates parsers and commands using the
__depends_on__and__args__attributes. - Supports adding single subcommand using the
__parent__ = 'subcommand'attribute.
Known Issues:¶
- 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).
Credits¶
This package was created with Cookiecutter and the audreyr/cookiecutter-pypackage project template.