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
Release files for uroboros 0.2.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| uroboros-0.2.3.tar.gz | 13.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| uroboros-0.2.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 26.6 kB
Release files / uroboros-0.2.3.tar.gz
| Download URL | uroboros-0.2.3.tar.gz |
|---|---|
| Size | 13.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
48d400ff0475683a33b6b4f31b9c6325bdef716e01db45918e793c0ad3f0375e
|
|
BLAKE2b-256 checksum How to use checksums |
22c0a8eb03a5009b576cd1cc4274a6e93639c74c08eef2b4edf264b6f5a4b4f8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.1
|
Release files / uroboros-0.2.3-py3-none-any.whl
| Download URL | uroboros-0.2.3-py3-none-any.whl |
|---|---|
| Size | 13.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3e97e88d260af7a7f7dfaeb13665b0d7f3e7650aa216063a393aab35e9d43486
|
|
BLAKE2b-256 checksum How to use checksums |
009b5adb3a21bf59f7071292d4ca1b248b711df8633ed4fee5972cc0f81838c7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.1
|