Skip to main content

argclz

PyPI - Python Version PyPI version

Documentation Status codecov

Class-based command-line argument parsing for Python that combines the power of argparse with class definitions and type annotations.

Features

  • Type-safe arguments - Automatically infer type conversion from Python type annotations
  • Clean syntax - Define arguments as class attributes with straightforward decorators
  • Composable - Easily reuse and extend argument definitions through inheritance
  • Validation - Built-in validation system with chainable API
  • Subcommands - Support for command hierarchies with minimal boilerplate
  • Organized help - Group arguments into logical sections for better documentation

Installation

pip install argclz

See Documentation

Quick Start

from argclz import *


class MyArgs(AbstractParser):
    verbose: bool = argument('--verbose', help='Enable verbose output')
    name: str = argument('-n', '--name', required=True, help='Name of the user')
    count: int = argument('--count', default=1, help='Number of times to greet')

    def run(self):
        for _ in range(self.count):
            if self.verbose:
                print(f"Greeting with enthusiasm: Hello, {self.name}!")
            else:
                print(f"Hello, {self.name}!")


if __name__ == '__main__':
    MyArgs().main()

Show help:

python my_script.py -h

Expected output:

usage: my_script.py [-h] [--verbose] -n NAME [--count COUNT]

options:
  -h, --help            show this help message and exit
  --verbose             Enable verbose output
  -n NAME, --name NAME  Name of the user
  --count COUNT         Number of times to greet

Run with:

python my_script.py --name Alice --count 3 --verbose

Core Features

Argument Types

# Regular argument
name: str = argument('-n', '--name', help='Name of the user')

# Boolean flag
verbose: bool = argument('--verbose', help='Enable verbose output')

# Positional argument
filename: str = pos_argument('FILENAME', help='Input file to process')

# Variable-length argument
items: list[str] = var_argument('ITEMS', help='Items to process')

Type Parsers

# Comma-separated values to a tuple of floats
coords: tuple[float, ...] = argument('--coords', type=float_tuple_type)

# Value range (min:max)
ranging: tuple[int, int] = argument('--range', type=int_tuple_type)

Argument Organization

# Grouped arguments
verbose: bool = argument('--verbose', group='general')
output_dir: str = argument('--output', group='output')

# Mutually exclusive arguments
output_json: bool = argument('--json', ex_group='output')
output_yaml: bool = argument('--yaml', ex_group='output')

Validators

# Range validator
age: int = argument('--age', validator.int.in_range(18, 99))

# Path validator
path: Path = argument('--path', validator.path.is_dir().is_exists())

Subcommands

class InitCmd(AbstractParser):
    name: str = argument('--name', required=True)

    def run(self):
        print(f"Initializing project: {self.name}")


class BuildCmd(AbstractParser):
    release: bool = argument('--release')

    def run(self):
        print("Building in release mode" if self.release else "Building in debug mode")


# Entry point
from argclz.commands import parse_command_args

if __name__ == '__main__':
    parse_command_args({
        'init': InitCmd,
        'build': BuildCmd
    })

Reusable Option Classes

class IOOptions:
    input_path: str = argument('--input', help='Input file')
    output_path: str = argument('--output', help='Output file')


class LoggingOptions:
    verbose: bool = argument('--verbose', help='Enable verbose logging')


class MyOptions(IOOptions, LoggingOptions):
    # Override an inherited argument
    input_path = as_argument(IOOptions.input_path).with_options(required=True)

License

BSD 3-Clause License

Metadata

Release files for argclz 1.0.2

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

Source distribution (sdist)

Source distribution for argclz 1.0.2
File Size Uploaded Provenance Actions
argclz-1.0.2.tar.gz 28.0 kB With provenance Details for argclz-1.0.2.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for argclz 1.0.2
File Interpreter ABI Platform Actions
argclz-1.0.2-py3-none-any.whl Python 3 none any Details for argclz-1.0.2-py3-none-any.whl

Total release size: 58.2 kB

Release files / argclz-1.0.2.tar.gz

Download URL argclz-1.0.2.tar.gz
Size 28.0 kB
Tags Source
SHA-256 checksum
How to use checksums
a9628489f4fb59410e33e1bdba5f697362c0a1c610ad54d3761b4e89b24b441b
BLAKE2b-256 checksum
How to use checksums
b81cec17a36f5c2ce25746320f4eb1097b67054032a086a1e0ed3a36fdb42f47
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 15, 2026.

Transparency log

Release files / argclz-1.0.2-py3-none-any.whl

Download URL argclz-1.0.2-py3-none-any.whl
Size 30.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
edc2a002f0168712c9a32fb28d982d2ee1fe9f815e83854595e3588a91d1d0dd
BLAKE2b-256 checksum
How to use checksums
dc977180a546c9e3001603377461f91a08ebc1f9e10875aac7965aa082e62c99
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 15, 2026.

Transparency log

Security for argclz 1.0.2

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.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for argclz-1.0.2.tar.gz

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 15, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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