.. image:: https://github.com/fritzo/parsable/workflows/Python%20CI/badge.svg :target: https://github.com/fritzo/parsable/actions :alt: Build status
.. image:: https://badge.fury.io/py/parsable.svg :target: https://pypi.python.org/pypi/parsable :alt: PyPI Version
.. image:: https://anaconda.org/fritzo/parsable/badges/version.svg :target: https://anaconda.org/fritzo/parsable :alt: Anaconda Cloud Version
Parsable is a lightweight decorator-based command line parser library. Parsable was written to be simpler than argparse, optparse, and argh.
Install from PyPI
_ with pip
.. _PyPI: http://pypi.python.org/pypi/parsable
.. code-block:: bash
pip install parsable
Or just download parsable.py
_ and add to your project.
.. _parsable.py
: https://raw.github.com/fritzo/parsable/master/parsable.py
Parsable uses just two pieces of syntax: a @parsable
command decorator,
and a parsable()
dispatch function.
-
Import parsable.
.. code-block:: python
from parsable import parsable
-
Decorate functions you want parsed. Parsable inspects the function to decide how to parse arguments. Arguments without default values are parsed as strings. Default arguments of any type
T
can be parsed as long asT(some_string)
can do the parsing... code-block:: python
@parsable def my_function(required_arg, optional_bool=True, optional_int=1): '''Help messages are not just a good idea, they are required''' # parsable automatically converts types based on default arguments: assert isinstance(required_arg, str) assert isinstance(optional_string, bool) assert isinstance(optional_int, int) # ... @parsable def do_stuff_with_files(*filenames, inplace=True): '''This does something to each file''' # ...
-
Dispatch at the end of the script.
.. code-block:: python
if __name__ == '__main__': parsable()
-
Use your new script
.. code-block:: bash
$ python my_script.py my_function demo optional_int=5 ... # parsable replaces - with _ to make functions easier to read $ python my_script.py do-stuff-with-files *.py inplace=false ...
To show verbose information (commmand name and timing info),
set the environment variable PARSABLE_VERBOSE=true
.
If you use parsable for many modules in a package, you can collect them in your
setup.py
using parsable.find_entry_points()
.
.. code-block:: python
from parsable import parsable
from setuptools import setup
setup(
name='my_package',
entry_points=parsable.find_entry_points('my_package'),
...
)
Parsable is dual-licensed under the MIT and GPL2 licenses.