Skip to main content

Command-line app helper library

Project description

CircleCI codecov PyPI version PyPI format

Arseparse is a simple Python utility/micro framework for writing command line interfaces. It provides some functionality around argparse that covers some common scenarios.

Installation:

pip install arseparse

Basic usage:

from arseparse import Parser, Option


parser = Parser()


# register a command that returns the square of an int
parser.register('square', lambda value: value**2, [Option('value', type=int)])


# register a command that simply returns a string
parser.register('ping', lambda: 'pong')


# or with a decorator
@parser.register_dec([Option('value', type=int)])
def cube(value):
    return value**3


sys.exit(parser.run())

You can then point an application entrypoint to the script or execute the file: your-entrypoint.py square 2

So far so boring. A more common scenario is to have a config file as the first argument, parse it, create objects that the command depends on, and pass those alongside the parsed attributes. The root_options and bootstrap constructor args to Parser allow us to implement this:

from arseparse import Parser, Option
import myapp


# these are options that come before our main command
root_options = [Option('config', type=str, help='path to ini file')]


# this lets us process/modify the kwargs before we execute the callable.
# we can rely on attributes resulting from root_options to be set.
# here config gets replaced by three objects: settings, db_session and user_svc
def bootstrap(**kwargs):
    config_uri = kwargs.pop('config')
    settings = myapp.parse_app_config(config_uri)
    dbsession = myapp.get_sessionmaker(settings)()
    user_svc = myapp.UserService(dbsession)
    kwargs.update(dict(settings=settings, dbsession=dbsession, user_svc=user_svc))
    return kwargs


parser = Parser(root_options, bootstrap)


@parser.register_dec([Option('username', type=str), Option('secret', type=str)])
def create_user(username, secret, user_svc, **kwargs):
    user_svc.create_user(username, secret)


@parser.register_dec([Option('user_id', type=int)])
def ban_user(user_id, user_svc, **kwargs):
    user_svc.ban_user(user_id)


@parser.register_dec()
def print_settings(settings, **kwargs):
    print(settings)

You can now provide the path to a config file as the first argument: your-entrypoint.py config.ini ban_user 23

Another common requirement is to be able to jump into a shell where some objects have been preconfigured for us. Here’s a simple recipe for that:

@parser.register_dec()
def shell(**kwargs):
    import IPython
    IPython.embed(user_ns=kwargs)

Calling your-entrypoint.py config.ini shell will drop you in an ipython shell where dbsession, settings and user_svc are in scope.

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

arseparse-0.1.2.tar.gz (3.3 kB view details)

Uploaded Source

Built Distribution

arseparse-0.1.2-py3-none-any.whl (3.2 kB view details)

Uploaded Python 3

File details

Details for the file arseparse-0.1.2.tar.gz.

File metadata

  • Download URL: arseparse-0.1.2.tar.gz
  • Upload date:
  • Size: 3.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for arseparse-0.1.2.tar.gz
Algorithm Hash digest
SHA256 a8fbb67dcf6161ee589d07d756ba16dc1429343ead6ae8629a5a1c6193c08840
MD5 95bb1016dc3ba5a9bc99c76569191f7e
BLAKE2b-256 50daa220527f5ab6f36bf13f2ed432d9c392ec2efb4d6b6afbcee27b6dcb4fe4

See more details on using hashes here.

File details

Details for the file arseparse-0.1.2-py3-none-any.whl.

File metadata

File hashes

Hashes for arseparse-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 a3993a1b2d5d3ad8df63c0abcd19e0998cfa93f8d33cd06173456ad9551bcf56
MD5 0d36074919ba0b6a4a60848c88c6d005
BLAKE2b-256 7f96671768f9d8c1ade98984f9b7d17012d131d4fabf22ceb9a6056c237c5626

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page