Skip to main content

Declarative and typed argument parsing built on argparse.

Project description

spargear 🛠️

PyPI PyPI - Downloads

A powerful yet simple Python library for declarative command-line argument parsing, built on top of argparse. spargear enables elegant, type-safe definitions of CLI arguments and subcommands with minimal boilerplate.

Why spargear?

  • Declarative: Define your CLI arguments neatly using Python data classes.
  • 🚀 Typed and Safe: Leveraging Python typing and dataclasses to ensure type safety and developer productivity.
  • 🔧 Flexible: Supports complex argument parsing scenarios, including subcommands and nested configurations.
  • 📦 Minimal Dependencies: Pure Python, built directly upon the reliable argparse module.

Installation

Install with pip:

pip install spargear

Quick Start

Define your arguments:

from spargear import ArgumentSpec, BaseArguments


class MyArgs(BaseArguments):
    input_file: ArgumentSpec[str] = ArgumentSpec(["-i", "--input"], required=True, help="Input file path")
    verbose: ArgumentSpec[bool] = ArgumentSpec(["-v", "--verbose"], action="store_true", help="Enable verbose output")

# Parse the command-line arguments
args = MyArgs()

# Access the parsed arguments
input_file: str = args.input_file.unwrap()  # If none, it raises an error
# input_file: str | None = args.input_file.value
verbose: bool = args.verbose.unwrap()  # If none, it raises an error
# verbose: str | bool = args.verbose.value
print(f"Input file: {input_file}")
print(f"Verbose mode: {verbose}")

Run your CLI:

python app.py --input example.txt --verbose

Features

  • Automatic inference of argument types
  • Nested subcommands with clear definitions
  • Typed file handlers via custom protocols
  • Suppress arguments seamlessly

Advanced Usage

Subcommands:

from typing import Optional
from spargear import BaseArguments, SubcommandSpec, ArgumentSpec


class InitArgs(BaseArguments):
    name: ArgumentSpec[str] = ArgumentSpec(["name"], help="Project name")


class CommitArgs(BaseArguments):
    message: ArgumentSpec[str] = ArgumentSpec(["-m"], required=True, help="Commit message")


class GitCLI(BaseArguments):
    init = SubcommandSpec("init", InitArgs, help="Initialize a new repository")
    commit = SubcommandSpec("commit", CommitArgs, help="Commit changes")


# Parse the command line arguments
args = GitCLI()

# Print the parsed arguments
name: Optional[str] = args.init.argument_class.name.value
message: Optional[str] = args.commit.argument_class.message.value
print(f"Name: {name}")
print(f"Message: {message}")

Run your CLI:

python app.py init my_project
python app.py commit -m "Initial commit"

Compatibility

  • Python 3.8+

License

MIT

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

spargear-0.1.0.tar.gz (8.6 kB view details)

Uploaded Source

Built Distribution

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

spargear-0.1.0-py3-none-any.whl (6.5 kB view details)

Uploaded Python 3

File details

Details for the file spargear-0.1.0.tar.gz.

File metadata

  • Download URL: spargear-0.1.0.tar.gz
  • Upload date:
  • Size: 8.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.6.2

File hashes

Hashes for spargear-0.1.0.tar.gz
Algorithm Hash digest
SHA256 fa2e25145bc79ba027115dcecebce57477ef0f079b9e575a04de98bbe7d22d9f
MD5 07a4f161b3fff33f2e00ca3ff66b21c4
BLAKE2b-256 4c4ef8d468b9091d1d400697e5c0da40abecf8fd5c09a19062d409a83c739854

See more details on using hashes here.

File details

Details for the file spargear-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: spargear-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 6.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.6.2

File hashes

Hashes for spargear-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 048685161a8b3a3ae11bdbd40d201f34900cf9babe1bf36dd4637f040157005d
MD5 86256de4f7acbffe8b9038dffd24dfe6
BLAKE2b-256 4aca5ba979c76749be236b143eea146e5c5da3ed6b269efdc748b3bd4e6a1d0a

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