Command-line app helper library
Project description
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
Release history Release notifications | RSS feed
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
Hashes for arseparse-0.1.2-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a3993a1b2d5d3ad8df63c0abcd19e0998cfa93f8d33cd06173456ad9551bcf56 |
|
MD5 | 0d36074919ba0b6a4a60848c88c6d005 |
|
BLAKE2b-256 | 7f96671768f9d8c1ade98984f9b7d17012d131d4fabf22ceb9a6056c237c5626 |