Skip to main content

structure and simplify subcommand handling with argparse

Project description

argparse_subcommand

Library to extend Python argparse stdlib with easy handling of subcommands

Extends argparse.ArgumentParser with a facility for configuring subcommands by convention. Each subcommand lives in its separate Python module.
The name of the subcommand is the module name (without superpackage names) with underscore replaced by dash.

To be a subcommand module, a module must have

import argparse_subcommand as ap_sub

meaning = "some help text for the subcommand"
def add_arguments(parser: ap_sub.ArgumentParser): ...  # configure the subcommand's sub-parser
def execute(args: ap_sub.Namespace): ...  # run the subcommand

The module can also optionally have:

aliases = ["subcmd-alias1", "subcmd-alias2"]  # optional.

for making available the same subcommand under one or more alternative names (e.g. an abbreviation).

For use, create the parser as usual and then call the submodule scanner:

parser = ArgumentParser(epilog=explanation)
parser.scan("mysubcmds.subcmd1", "mysubcmds.subcmd2")  # or provide module object instead of str
args = parser.parse_args()
parser.execute_subcommand(args)  # or supply nothing, then parse_args() will be called internally

By convention, the subcommand modules (and only they) all go into a common package. If you do that, you can scan them all at once:

parser.scan("mysubcmds.*")

argparse_subcommand uses only one sub-parser group, so that subcommands cannot be nested, there is only one level of subcommands. This is rarely a limitation.
It will execute importlib.import_module() on all modules mentioned in a scan() call as strings.
Multiple calls to scan() are allowed, each can have one or more arguments.
scan(..., strict=True) will exit when encountering a non-subcommand-module.

That's all.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

argparse_subcommand-1.0.tar.gz (3.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

argparse_subcommand-1.0-py3-none-any.whl (6.4 kB view details)

Uploaded Python 3

File details

Details for the file argparse_subcommand-1.0.tar.gz.

File metadata

  • Download URL: argparse_subcommand-1.0.tar.gz
  • Upload date:
  • Size: 3.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.5.1 CPython/3.10.4 Windows/10

File hashes

Hashes for argparse_subcommand-1.0.tar.gz
Algorithm Hash digest
SHA256 b932dad40a35626f53af153fb07129b7f2f2735e511d84f59b340ae00cdde96b
MD5 97cb26a6f6f1c0c49121b9a518049f2c
BLAKE2b-256 0572e932c93f6d6c40d4affe3867d25de35fb69f34cc6f177ebac502f4fe8080

See more details on using hashes here.

File details

Details for the file argparse_subcommand-1.0-py3-none-any.whl.

File metadata

  • Download URL: argparse_subcommand-1.0-py3-none-any.whl
  • Upload date:
  • Size: 6.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.5.1 CPython/3.10.4 Windows/10

File hashes

Hashes for argparse_subcommand-1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 88ae11f2ef3cbf88aded200e5fa699716633e6bc398f01b2b87401ec4d8837e8
MD5 853ec1f59f9c9cb3602aa5bdd31bf154
BLAKE2b-256 017db44842448ea31f2547c515d7b6b9d838092fbaa9c28a3f13af561abb4327

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page