A drop-in replacement for `argparse` dispatching subcommand calls to functions, modules or binaries.
Project description
If your parser has less than five subcommands, you can parse them with argparse. If you have more, you still can, but you will get a huge, unreadable code. This module makes this easier by dispatching subcommand calls to functions, modules or binaries.
Examples
Example 1 : Manual definition of subcommands
For instance, consider the following code for mycommand.py:
import sys from argdispatch import ArgumentParser def foo(args): """A function associated to subcommand `foo`.""" print("Doing interesting stuff") sys.exit(1) if __name__ == "__main__": parser = ArgumentParser() subparser = parser.add_subparsers() subparser.add_function(foo) subparser.add_package("bar") subparser.add_binary("baz") subparser.parse_args()
With this simple code:
mycommand.py foo -v --arg=2 is equivalent to the python code foo(['-v', '--arg=2']);
mycommand.py bar -v --arg=2 is equivalent to python -m bar -v --arg=2;
mycommand.py baz -v --arg=2 is equivalent to baz -v --arg=2.
Then, each function, module or binary does whatever it wants with the arguments.
Example 2 : Automatic definition of subcommands
With programs like git, if a git-foo binary exists, then calling git foo --some=arguments is equivalent to git-foo --some=arguments. The following code, in myprogram.py copies this behaviour:
import sys from argdispatch import ArgumentParser if __name__ == "__main__": parser = ArgumentParser() subparser = parser.add_subparsers() subparser.add_iter_modules("myprogram") subparser.add_prefix_binaries("myprogram-") subparser.parse_args()
With this program, given that binary myprogram-foo and python module myprogram.bar.__main__.py exist:
myprogram foo -v --arg=2 is equivalent to myprogram-foo -v --arg=2;
myprogram bar -v --arg=2 is equivalent to python -m myprogram.bar -v --arg=2.
Documentation
The complete documentation is available on readthedocs.
To compile it from source, download and run:
cd doc && make html
What’s new?
See changelog.
Download and install
From sources:
Download: https://pypi.python.org/pypi/argdispatch
Install (in a virtualenv, if you do not want to mess with your distribution installation system):
python3 setup.py install
From pip:
pip install argdispatch
Quick and dirty Debian (and Ubuntu?) package
This requires stdeb to be installed:
python3 setup.py --command-packages=stdeb.command bdist_deb sudo dpkg -i deb_dist/argdispatch-<VERSION>_all.deb
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 argdispatch-0.1.0b1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7f239a3890c725939671c9ae49eab3fa1b1f5417e2313b56d3ccc223ff918874 |
|
MD5 | e271e7e593116a46cf2f47e040c8bc71 |
|
BLAKE2b-256 | 2a2393d42e81b227fb489afe08002ae3fde8201323aecae5745ecd04d45d7cd5 |