Yet another argparse helper: complex sub-command trees made simple
Project description
Yet another argparse helper: complex sub-command trees made simple
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=AtMostOnce))
# the second iteration becomes OptionalOverride
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.
We also have AppendN(t)
as an action type. It works like Append
, but the type constructor
t
is applied to its collected argument(s) before the result is appended to the list.
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 Distributions
Built Distribution
File details
Details for the file argparse_helper-0.9.3-py3-none-any.whl
.
File metadata
- Download URL: argparse_helper-0.9.3-py3-none-any.whl
- Upload date:
- Size: 4.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.43.0 CPython/3.8.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b0b621589b2901455129f1789858991e67df8a58679aae910340c8e57b29ff3e |
|
MD5 | c7dfb9870aa15ccbb121b8af38481087 |
|
BLAKE2b-256 | c8b4853195e461994ac38b076e6b2c5b7102c71798c49af57525ecb03563af21 |