Skip to main content

nested-argparse 💬 → 🅰.🅱.🆒

PyPI PyPI - Status PyPI - Python Version PyPI - License

nested-argparse is a python module that non-invasively builds on top of the built-in argparse library to allow subparsers to parse into their own nested namespaces.

The library exposes a class NestedArgumentParser which allows arbitrary nesting without worry of namespace conflicts. This is achieved with the following principles of this library:

  • Inversion of Control: A parser, when adding a subparser, is in control of what name to use for the sub-namespace which the subparser sends its parsed args to.
  • Drop-In Replacement: The constructor for nested_argparse.NestedArgumentParser can be substituted in directly to where the constructor for argparse.ArgumentParser is being used. All subsequent method calls and subparser API calls should work without any additional code change!
  • Customizeability: There are additional kwargs exposed to further customize the nesting options to your liking, if the defaults do not suit your scenario.

The main difference between this library and its built-in counterpart is the return value of the parse_args method. Instead of a flat namespace containing all parsed arguments across all subparsers, NestedArgumentParser will produce a namespace tree.

Simple Conceptual Example

Given the following parser:

Root Parser
 ├─ positional_1
 ├─ --optional_1
 ├─ --optional_2
 └─ sub parsers with dest='subcommand'
     ├─ Sub Parser 1 with name='sub1'
     │   ├─ --optional_1
     │   └─ --optional_2 with dest='optional2AltName'
     └─ Sub Parser 2 with name='sub2'
         ├─ --optional_1
         └─ --optional_2

And the following args to parse:

Alice --optional_1=Bob sub1 --optional_1=Carol --optional_2=David

The built-in ArgumentParser would not be able to handle the duplication in dests, but NestedArgumentParser will produce the following result when run through parse_args:

Namespace(
  subcommand='sub1',
  positional_1='Alice',
  optional_1='Bob',
  sub1=Namespace(
    optional_1='Carol',
    optional2AltName='David'
  )
)

API Documentation

The library exposes the following modules.

Module nested_argparse

The module exports the following classes.

Class NestedArgumentParser

Constructor

In addition to the parameters available to ArgumentParser constructor, the following parameters are also accepted:

  • Param nest_dir, optional, type: Optional[str]

    • When a string is passed in, it is used as the attribute name in the parent namespace to which the nested namespace, where the parsed values will be stored, is assigned to.
    • When None is passed in, no nested namespace is created, and parsed values are directly assigned to the parent namespace. This is the behavior of the base ArgumentParser.
    • Default value: None.
  • Param nest_separator, optional, type: str

    • It is used as the separator to delimit components in the nest path when representing the path as a string (for example, this is used to generate dests)
    • Default value: '__'.
  • Param nest_path, optional, type: Optional[List[str]]

    • When a list of strings is passed in, it is used as a sequence of nested attribute names from the parent namespace which locates the nested namespace where the parsed values will be stored.
    • When None is passed in, no nested namespace is created, and parsed values are directly assigned to the parent namespace. This is the behavior of the base ArgumentParser.
Override NestedArgumentParser.add_argument

Instead of adding an argument definition which stores the parsed value to dest in the flat top-level namespace, the parsed value will be stored at attribute with the name given by dest in the namesapce at the nesting path associated with this parser.

Override NestedArgumentParser.add_subparsers

The return value of this method is an instance of internal subparser handler _NestedSubParsersAction, which exposes extra options for adding subparsers.

Override NestedArgumentParser.parse_args

The return value of this method is a namespace tree rather than a flat namespace. The tree is built according to the nesting paths associated with each of the parsed values.

Override NestedArgumentParser.parse_known_args

The return value of this method is a namespace tree rather than a flat namespace. The tree is built according to the nesting paths associated with each of the parsed values.

Class _NestedSubParsersAction

Override _NestedSubParsersAction.add_parser
  • Param nest_dir, optional, type: Optional[str]
    • When a string is passed in, it is used as the attribute name in the parent namespace to which the subparser will store its parsed values to.
    • When None is passed in, the dest field is used as the nesting directory instead.
    • Default value: None.

Metadata

Release files for nested-argparse 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for nested-argparse 0.2.0
File Size Uploaded
nested_argparse-0.2.0.tar.gz 10.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for nested-argparse 0.2.0
File Interpreter ABI Platform
nested_argparse-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 17.7 kB

Release files / nested_argparse-0.2.0.tar.gz

Download URL nested_argparse-0.2.0.tar.gz
Size 10.2 kB
Tags Source
SHA-256 checksum
How to use checksums
b5052e25a6423c41f01e8f1166dbb57f33df161200276e6d73ec5e2f04cd9922
BLAKE2b-256 checksum
How to use checksums
9b3630e3d0522197db36d15dd7ae5cefd303a9f92985e98bd4cdc23a94204577
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 16, 2026.

Transparency log

Release files / nested_argparse-0.2.0-py3-none-any.whl

Download URL nested_argparse-0.2.0-py3-none-any.whl
Size 7.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9490e65ce6cd88c8c7a609c22941cc7ca6902abae617482d2b450069561d5890
BLAKE2b-256 checksum
How to use checksums
660a8685ba3d55def7611512ecd7d88eb6ed249e53d9238814f37dc6b6c24813
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 16, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page