Skip to main content

pydantic-argify

Python PyPI version codecov Downloads License Code style: black

Build ArgumentParser from pydantic model.

Getting started

High level api

See ./examples/00_getting_started.py

from pydantic import BaseModel, Field
from pydantic_argify import sub_command, main

class ConfigCommand1(BaseModel):
    string: str = Field(description="string parameter")
    integer: int = Field(description="integer parameter")

class ConfigCommand2(BaseModel):
    string: str = Field(description="string parameter")

@sub_command("command1")
def command1(config: ConfigCommand1):
    print(config)

@sub_command("command2")
def command2(config: ConfigCommand2):
    print(config)

if __name__ == "__main__":
    main()
$ poetry run python -m examples.00_getting_started command1 -h
usage: 00_getting_started.py command1 [-h] --string STRING --integer INTEGER

options:
  -h, --help            show this help message and exit

ConfigCommand1:
  --string STRING, -s STRING
                        string parameter
  --integer INTEGER, -i INTEGER
                        integer parameter

Low level api

from argparse import ArgumentParser
from pydantic import BaseModel, Field
from pydantic_argify import build_parser

class Config(BaseModel):
    string: str = Field(description="string parameter")
    integer: int = Field(description="integer parameter")

parser = ArgumentParser()
build_parser(parser)
parser.print_help()
usage: basic.py [-h] --string STRING --integer INTEGER

optional arguments:
  -h, --help            show this help message and exit

Config:
  --string STRING, -s STRING
                        a required string
  --integer INTEGER, -i INTEGER
                        a required integer

What's difference with other projects.

This project is dedicated to crafting an argument parser based on the Pydantic model. Unlike many other projects where the ArgumentParser functionality is concealed within the library, this tool aims to simplify its use, even in complex scenarios. For instance, handling nested sub-parsers like aws s3 cp <some options> or supporting nested Pydantic models has been a challenge in existing solutions. This library overcomes these limitations, allowing you to effortlessly incorporate intricate functionalities.

Example

from argparse import ArgumentParser
from pydantic import BaseModel, Field
from pydantic_argify import build_parser

class SubConfigA(BaseModel):
    string: str = Field(description="string parameter")
    integer: int = Field(description="integer parameter")

class SubConfigB(BaseModel):
    double: float = Field(description="a required string")
    integer: int = Field(0, description="a required integer")


parser = ArgumentParser()
subparsers = parser.add_subparsers()
build_parser(subparsers.add_parser("alpha"), SubConfigA)
build_parser(subparsers.add_parser("beta"), SubConfigB)
parser.print_help()
usage: sub_parser.py [-h] {alpha,beta} ...

positional arguments:
  {alpha,beta}

optional arguments:
  -h, --help    show this help message and exit

Nested config

See: ./examples/06_nested_field

$ python -m examples.06_nested_field -h
usage: 06_nested_field.py [-h] --name NAME --child.name CHILD.NAME [--child.age CHILD.AGE] --child.is-active CHILD.IS_ACTIVE

options:
  -h, --help            show this help message and exit

Config:
  --name NAME, -n NAME

ChildConfig:
  --child.name CHILD.NAME, -c CHILD.NAME
  --child.age CHILD.AGE
  --child.is-active CHILD.IS_ACTIVE

Additional config

Behaviour of pydantic can be controlled via the Config class or extra arguments of Field. Config is affected all fields. Extra arguments of Field is affected specific field.

cli_disable_prefix
Prefix of argument of boolean type for `store_false`. Default to --disable-
cli_enable_prefix
Prefix of argument of boolean type for `store_true`. Default to --enable-

Future works

  • [ ]: Options completion for bash

Metadata

Release files for pydantic-argify 0.4.5

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

Source distribution (sdist)

Source distribution for pydantic-argify 0.4.5
File Size Uploaded
pydantic_argify-0.4.5.tar.gz 11.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pydantic-argify 0.4.5
File Interpreter ABI Platform
pydantic_argify-0.4.5-py3-none-any.whl Python 3 none any Details

Total release size: 23.9 kB

Release files / pydantic_argify-0.4.5.tar.gz

Download URL pydantic_argify-0.4.5.tar.gz
Size 11.2 kB
Tags Source
SHA-256 checksum
How to use checksums
79d41dc241bdd0038f9c54c938dc8c921c8f47bbee339dac1cf86094c641d918
BLAKE2b-256 checksum
How to use checksums
f57ebdd1133165a9bc248a9ff8d4474c2b0a286682b229aa7143e6e288232595
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.8.2 CPython/3.11.7 Windows/10

Release files / pydantic_argify-0.4.5-py3-none-any.whl

Download URL pydantic_argify-0.4.5-py3-none-any.whl
Size 12.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ad839f927301bd6aa7111f9b5c7fed72415069ab4db6dd339e474619bcd7d8f2
BLAKE2b-256 checksum
How to use checksums
421d345a68c054ec5e05324ad4d0733b7f61c7e055f51887ed3c814e24dac81b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.8.2 CPython/3.11.7 Windows/10

Release history Release notifications | RSS feed

This release

0.4.5 This release

2 release files

0.4.4

2 release files

0.4.3

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.4

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.1

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