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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a8fbb67dcf6161ee589d07d756ba16dc1429343ead6ae8629a5a1c6193c08840
|
|
| MD5 |
95bb1016dc3ba5a9bc99c76569191f7e
|
|
| BLAKE2b-256 |
50daa220527f5ab6f36bf13f2ed432d9c392ec2efb4d6b6afbcee27b6dcb4fe4
|
File details
Details for the file arseparse-0.1.2-py3-none-any.whl.
File metadata
- Download URL: arseparse-0.1.2-py3-none-any.whl
- Upload date:
- Size: 3.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a3993a1b2d5d3ad8df63c0abcd19e0998cfa93f8d33cd06173456ad9551bcf56
|
|
| MD5 |
0d36074919ba0b6a4a60848c88c6d005
|
|
| BLAKE2b-256 |
7f96671768f9d8c1ade98984f9b7d17012d131d4fabf22ceb9a6056c237c5626
|