Yet another argparse helper: complex subcommand trees made simple
Project description
A wrapper around argparse
Writing complex subcommand parsers using argparse
is certainly possible, but it involves a lot
of laborious repetition.
This library provides a small wrapper around argparse
that adds a convenience method. That
lets you specify a sequence of words that form a command, together with flags - and the
definitions of those flags are passed at the same time.
parser = ArgumentParser()
parser.add_command("foo bar baz --json",
func=lambda *args: print("foo-bar-baz"),
json=dict(default=False, action="store_true"),
)
parser.add_command("foo bar quux",
func=lambda *args: print("foo-bar-quux"),
)
The func
parameter will be set on the resulting namespace. Note, there is no particular requirement
for the arguments that must be passed to func
- this is down to the library user to define.
Additionally, a new argparse.Action
subclass is provided, OptionalOverride
. This supports
having the same flag appear in a global position and be repeated by a subcommand. It works
well - in as much as defaults set by the global position won't be re-set in the subordinate
position.
parser.add_command("--flag", flag=dict(default="foo"))
parser.add_command("xyzzy --flag", flag=dict(action=OptionalOverride))
Where a flag is repeated in an add_command
call, the second and subsequent values receive an
OptionalOveride
setting automatically.
parser.add_command("--glob xyzzy --glob", glob=dict(action=OptionalOverride))
Finally, AtMostOnce
is supplied as an action type; this causes an explicit error (rather than
just overriding the previous value) if a flag is specified more than once.
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 argparse_helper-0.9.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | aff59ba2f2c4a937910e82881a37032c227e87062ec969213298d1bf3be9c228 |
|
MD5 | 90750709dbaa9eae7a3417e68fd7399f |
|
BLAKE2b-256 | 60397c5ff170cf52a9311ee6cb589fc4321131e23a1e24ed9731cd2d3c06f037 |