Skip to content

Pydantic Argparse

Typed Argument Parsing with Pydantic



Overview

pydantic-argparse is a Python package built on top of pydantic which provides declarative typed argument parsing using pydantic models.

Requirements

pydantic-argparse requires Python 3.8+, and is compatible with the Pydantic v1 API.

Installation

Installation with pip is simple:

$ pip install pydantic-argparse

Quick Start

Define Model

simple.py
"""Simple Example."""

import pydantic.v1 as pydantic

import pydantic_argparse


class Arguments(pydantic.BaseModel):
    """Simple Command-Line Arguments."""

    # Required Args
    string: str = pydantic.Field(description="a required string")
    integer: int = pydantic.Field(description="a required integer")
    flag: bool = pydantic.Field(description="a required flag")

    # Optional Args
    second_flag: bool = pydantic.Field(False, description="an optional flag")
    third_flag: bool = pydantic.Field(True, description="an optional flag")


def main() -> None:
    """Simple Main Function."""
    # Create Parser and Parse Args
    parser = pydantic_argparse.ArgumentParser(
        model=Arguments,
        prog="Example Program",
        description="Example Description",
        version="0.0.1",
        epilog="Example Epilog",
    )
    args = parser.parse_typed_args()

    # Print Args
    print(args)


if __name__ == "__main__":
    main()

Check Help

$ python3 simple.py --help
usage: Example Program [-h] [-v] --string STRING --integer INTEGER --flag |
                       --no-flag [--second-flag] [--no-third-flag]

Example Description

required arguments:
  --string STRING    a required string
  --integer INTEGER  a required integer
  --flag, --no-flag  a required flag

optional arguments:
  --second-flag      an optional flag (default: False)
  --no-third-flag    an optional flag (default: True)

help:
  -h, --help         show this help message and exit
  -v, --version      show program's version number and exit

Example Epilog

Parse Arguments

$ python3 simple.py --string hello --integer 42 --flag
string='hello' integer=42 flag=True second_flag=False third_flag=True

Credits

This project is made possible by pydantic.

License

This project is licensed under the terms of the MIT license.