Simple framework for building scalable CLI tool
Project description
uroboros
Simple framework for building scalable CLI tool.
NOTE
This framework currently under development. Please be careful to use.
Features
- Simple interface
- Pure python
- Thin wrapper of
argparse
- No third party dependencies
- Thin wrapper of
- Easy to reuse common options
- Easy to create sub commands
- Nested sub command is also supported
Environment
- Python >= 3.5
- No support for python 2.x
Install uroboros
$ pip install uroboros
How to use
Implement your command using uroboros.Command
and create a command tree.
# sample.py
from uroboros import Command
from uroboros.constants import ExitStatus
class RootCommand(Command):
"""Root command of your application"""
name = 'sample'
long_description = 'This is a sample command using uroboros'
def build_option(self, parser):
"""Add optional arguments"""
parser.add_argument('--version', action='store_true', default=False, help='Print version')
return parser
def run(self, args):
"""Your own script to run"""
if args.version:
print("{name} v{version}".format(
name=self.name, version='1.0.0'))
else:
self.print_help()
return ExitStatus.SUCCESS
class HelloCommand(Command):
"""Sub command of root"""
name = 'hello'
short_description = 'Hello world!'
long_description = 'Print "Hello world!" to stdout'
def run(self, args):
print(self.short_description)
return ExitStatus.SUCCESS
# Create command tree
root_cmd = RootCommand()
root_cmd.add_command(HelloCommand())
if __name__ == '__main__':
exit(root_cmd.execute())
Then, your command works completely.
$ python sample.py -h
usage: sample [-h] [--version] {hello} ...
This is a sample command using uroboros
optional arguments:
-h, --help show this help message and exit
--version Print version
Sub commands:
{hello}
hello Hello world!
$ python sample.py --version
sample v1.0.0
$ python sample.py hello
Hello world!
If you want to use new sub command sample.py hello xxxx
, you just implement new XXXXCommand
and add it to Hello
.
root_cmd = RootCommand().add_command(
HelloCommand().add_command(
XXXXCommand()
)
)
You can see other examples in examples.
Develop
First, clone this repository and install uroboros with editable option.
$ git clone https://github.com/pddg/uroboros
$ cd /path/to/uroboros
$ pip install -e .
Use Pipenv
for lint and test.
# Create environment
$ pipenv install --dev
# Execute lint by flake8
$ pipenv run lint
# Execute test by py.test
$ pipenv run test
Also support test with tox
. Before execute test with tox
, you should make available to use python 3.5
and 3.6
, 3.7
.
License
Apache 2.0
Author
Shoma Kokuryo
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 uroboros-0.2.4.tar.gz
.
File metadata
- Download URL: uroboros-0.2.4.tar.gz
- Upload date:
- Size: 13.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.3.1 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.7.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f57343ef0c72d114564746edc4cf337cbd30f5407da09b1eba1951d87a819594 |
|
MD5 | b1106a6e0b438e345811de937eac609d |
|
BLAKE2b-256 | 10fe372131d52e37e8a5b6ca011d778723079b4055a7dfe4a5cb966c9db133cb |
File details
Details for the file uroboros-0.2.4-py3-none-any.whl
.
File metadata
- Download URL: uroboros-0.2.4-py3-none-any.whl
- Upload date:
- Size: 13.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.3.1 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.7.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f47d0e8eeafdb9d128b6e408c546a61fe34e688b7f915f79cc14a1f593626950 |
|
MD5 | 74811e269b24e595ecfaff41bbb55055 |
|
BLAKE2b-256 | 244f097ac1ca9b4c1d1085a95d3044b28a1401749d736e8bb2c9235a59b5052a |