Metadata-Version: 2.4
Name: pydanticV2-argparse
Version: 1.0.5
Summary: Typed Argument Parsing with Pydantic
License-Expression: MIT
License-File: LICENSE.md
Keywords: python,pydantic,argparse,typed,validation
Author: HUANGYI QIN
Author-email: qinhunagyi@gmail.com
Requires-Python: >=3.8
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Requires-Dist: pydantic (>=2.10.0)
Requires-Dist: pydantic-settings (>=2.8.1)
Project-URL: Homepage, https://github.com/qinhy/pydanticV2-argparse
Project-URL: Repository, https://github.com/qinhy/pydanticV2-argparse
Description-Content-Type: text/markdown

<div align="center">
    <a href="https://github.com/qinhy/pydanticV2-argparse">
        <img src="https://raw.githubusercontent.com/qinhy/pydanticV2-argparse/master/docs/assets/images/logo.jpg" width="50%">
    </a>
    <h1>
        Pydantic Argparse
    </h1>
    <p>
        <em>Typed Argument Parsing with Pydantic</em>
    </p>
    <a href="https://pypi.python.org/pypi/pydanticV2-argparse">
        <img src="https://img.shields.io/pypi/v/pydanticV2-argparse.svg">
    </a>
    <a href="https://github.com/qinhy/pydanticV2-argparse">
        <img src="https://img.shields.io/pypi/pyversions/pydanticV2-argparse.svg">
    </a>
    <a href="https://github.com/qinhy/pydanticV2-argparse/blob/master/LICENSE.md">
        <img src="https://img.shields.io/github/license/qinhy/pydanticV2-argparse.svg">
    </a>
    <br>
    <a href="https://github.com/qinhy/pydanticV2-argparse/actions/workflows/tests.yml">
        <img src="https://img.shields.io/github/actions/workflow/status/qinhy/pydanticV2-argparse/tests.yml?label=tests">
    </a>
    <a href="https://github.com/qinhy/pydanticV2-argparse/actions/workflows/tests.yml">
        <img src="https://img.shields.io/coveralls/github/qinhy/pydanticV2-argparse">
    </a>
    <a href="https://github.com/qinhy/pydanticV2-argparse/actions/workflows/linting.yml">
        <img src="https://img.shields.io/github/actions/workflow/status/qinhy/pydanticV2-argparse/linting.yml?label=linting">
    </a>
    <a href="https://github.com/qinhy/pydanticV2-argparse/actions/workflows/typing.yml">
        <img src="https://img.shields.io/github/actions/workflow/status/qinhy/pydanticV2-argparse/typing.yml?label=typing">
    </a>
</div>

## Help
See [documentation](https://github.com/qinhy/pydanticV2-argparse) for help.

## Installation
Installation with `pip` is simple:
```console
$ pip install pydanticV2-argparse
```

## Example
```py
import pydantic
import pydanticV2_argparse


class Arguments(pydantic.BaseModel):
    # 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:
    # Create Parser and Parse Args
    parser = pydanticV2_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()
```

```console
$ python3 example.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
```

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

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

