clasp is tools for command line and subprocess script development
Project description
About
Clasp (command line and subprocess) extends click (https://palletsprojects.com/p/click/) and provides a library of functions that aid in the development of command line tools that require frequent calls to system exectubles. A particular structure program [options] command arguments [options] has been implemented for click that sets up an easy way to read and write config files and group commands under common programs to allow for organized development of suites of command line tools.
Installation
pip install clasp
Usage
a command line program has the following structure:
"""template file.""" import clasp.click as click import clasp.click_ext as clk @click.group() @clk.shared_decs(clk.main_decs) def main(ctx, config, outconfig, configalias, inputalias): """template file for script development.""" clk.get_config(ctx, config, outconfig, configalias, inputalias) @main.command('XXX') @click.argument('arg1') @click.option('--opts','-opts', is_flag=True, help="check parsed options") @click.option('--debug', is_flag=True, help="show traceback on exceptions") @click.pass_context def XXX(ctx, arg1, **kwargs): """ docstring with full help text for command """ if kwargs['opts']: kwargs['opts'] = False clk.echo_args(arg1,**kwargs) else: try: ########## #code body ########## except click.Abort: raise except Exception as ex: clk.print_except(ex, kwargs['debug']) return 'XXX', kwargs, ctx @main.result_callback @click.pass_context def printconfig(ctx, opts, **kwargs): """callback to save config file""" try: clk.tmp_clean(opts[2]) except Exception: pass if kwargs['outconfig']: clk.print_config(ctx, opts, kwargs['outconfig'], kwargs['config'], kwargs['configalias'])
to make an entry point in setup:
entry_points={"console_scripts":'program=package.program:main'}
and then to execute:
program XXX arg1 [options]
to enable autocomple for options:
_PROGRAM_COMPLETE=source program > bash_complete.sh # put this in .bash_profile (with path) source bash_complete.sh
scripting
see script_tools documentation for helpful functions matching parsed args to functions, calling subprocesses, and parallel processing using ipyparallel locally and via ssh.
Callbacks
in addition to the powerful option parsing provided by click a number of callbacks are part of clasp which help with commonly used argument parsing
File input
file inputs can be given with wildcard expansion (in quotes so that the callback handles) using glob plus the following:
[abc] (one of a, b, or c)
[!abc] (none of a, b or c)
‘-’ (hyphen) collect the stdin into a temporary file (clasp_tmp*)
~ expands user
The file input callbacks are:
parse_file_list: returns list of files (raise error if file not found)
is_file: check if a single path exists (prompts for user input if file not found)
are_files: recursively calls parse_file_list and prompts on error
is_file_iter: use when multiple=True
are_files_iter: use when mulitple=True
are_files_or_str: tries to parse as files, then tries split_float, then split_int, then returns string
are_files_or_str_iter: use when mulitple=True
String parsing
split_str: split with shlex.split
split_str_iter: use when multiple=True
color_inp: return alphastring, split on whitespace, convert floats and parse tuples on ,
Number parsing
tup_int: parses integer tuples from comma/space seperated string
tup_float: parses float tuples from comma/space seperated string
split_float: splits list of floats and extends ranges based on : notation
split_int: splits list of ints and extends ranges based on : notation
Documentation
Click and sphinx_click make help and documentation super easy, but there are a few conflicts in formatting docstrings both for –help and for sphinx. clasp.sphinx_click_ext attempts to resolve these conflicts and does some sorting of options and help display based on the script template shown above. To use with sphinx add ‘clasp.sphinx_click_ext’ to extensions in your conf.py
Source Code
Licence
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
File details
Details for the file clasp-1.1.10.tar.gz
.
File metadata
- Download URL: clasp-1.1.10.tar.gz
- Upload date:
- Size: 32.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f997c984e829d113bb4dcdc6cf9dfd0b23bdbe26f3ed82aedb74628c82842bab |
|
MD5 | bdb02fd1f3ba8cbddad3f8791599e070 |
|
BLAKE2b-256 | 7ed0b5ca00a5eaf682e53e5b82d821b07a38e0e721b232284891e6c49374c975 |
File details
Details for the file clasp-1.1.10-py2.py3-none-any.whl
.
File metadata
- Download URL: clasp-1.1.10-py2.py3-none-any.whl
- Upload date:
- Size: 27.5 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d1867dea6e50e264b0a3d0b74ea887324cd689fd5f28dab2bb0ac74eff2e95a7 |
|
MD5 | 36c649984825670e2fcce970bd440f96 |
|
BLAKE2b-256 | 15e9aca3f935efb35814a6e42e21181102d011e096637d0e0dac8ad3280e0f91 |