Skip to main content

uroboros

Build Status PyPI pyversions PyPI version shields.io GitHub license

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
  • 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)

Source distribution for uroboros 0.2.3
File Size Uploaded
uroboros-0.2.3.tar.gz 13.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for uroboros 0.2.3
File Interpreter ABI Platform
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

Release history Release notifications | RSS feed

0.2.4

2 release files

This release

0.2.3 This release

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page