pydantic-argparse-builder


Namepydantic-argparse-builder JSON
Version 0.3.1 PyPI version JSON
download
home_page
SummaryBuild ArgumentParser from pydantic model.
upload_time2023-08-01 16:31:38
maintainer
docs_urlNone
authorelda27
requires_python>=3.8,<4.0
licenseApache-2.0
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # pydantic-argparse-builder
[![Python](https://img.shields.io/pypi/pyversions/pydantic-argparse-builder.svg)](https://pypi.org/project/pydantic-argparse-builder/)
[![PyPI version](https://badge.fury.io/py/pydantic-argparse-builder.svg)](https://badge.fury.io/py/pydantic-argparse-builder)
[![codecov](https://codecov.io/gh/elda27/pydantic_argparse_builder/branch/main/graph/badge.svg?token=GLqGNtE7Df)](https://codecov.io/gh/elda27/pydantic_argparse_builder)
[![Downloads](https://static.pepy.tech/badge/pydantic-argparse-builder)](https://pepy.tech/project/pydantic-argparse-builder)
[![License](https://img.shields.io/pypi/l/pydantic-argparse-builder.svg)](https://github.com/google/pydantic_argparse_builder/blob/main/LICENSE)
[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)

Build ArgumentParser from pydantic model.

## What's difference with other projects.

This project focuses on creating an argument parser from the pydantic model.
Many other projects hide `ArgumentParser` in the library, but it is difficult to use in complicated cases.
For example nested sub parser; i.e. `aws s3 cp <some options>`, or nested pydantic model is not supported.
This library achieve that you can easily add complicate uses.

## Example 1

```python
from argparse import ArgumentParser
from pydantic import BaseModel, Field
from pydantic_argparse_builder 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
```

## Example 2

```python
from argparse import ArgumentParser
from pydantic import BaseModel, Field
from pydantic_argparse_builder 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
```

## 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. 


<dl>
  <dt><code>cli_disable_prefix</code></dt>
  <dd>Prefix of argument of boolean type for `store_false`. Default to <code>--disable-</code></dd>

  <dt><code>cli_enable_prefix</code></dt>
  <dd>Prefix of argument of boolean type for `store_true`. Default to <code>--enable-</code></dd>

</dl>


## Future works

- [ ]: Options completion for bash

            

Raw data

            {
    "_id": null,
    "home_page": "",
    "name": "pydantic-argparse-builder",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.8,<4.0",
    "maintainer_email": "",
    "keywords": "",
    "author": "elda27",
    "author_email": "kaz.birdstick@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/bc/92/dd830c97d39c46d8825f5447c93c0c92b1090b4669ae9aea0cfde2de2924/pydantic_argparse_builder-0.3.1.tar.gz",
    "platform": null,
    "description": "# pydantic-argparse-builder\n[![Python](https://img.shields.io/pypi/pyversions/pydantic-argparse-builder.svg)](https://pypi.org/project/pydantic-argparse-builder/)\n[![PyPI version](https://badge.fury.io/py/pydantic-argparse-builder.svg)](https://badge.fury.io/py/pydantic-argparse-builder)\n[![codecov](https://codecov.io/gh/elda27/pydantic_argparse_builder/branch/main/graph/badge.svg?token=GLqGNtE7Df)](https://codecov.io/gh/elda27/pydantic_argparse_builder)\n[![Downloads](https://static.pepy.tech/badge/pydantic-argparse-builder)](https://pepy.tech/project/pydantic-argparse-builder)\n[![License](https://img.shields.io/pypi/l/pydantic-argparse-builder.svg)](https://github.com/google/pydantic_argparse_builder/blob/main/LICENSE)\n[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)\n\nBuild ArgumentParser from pydantic model.\n\n## What's difference with other projects.\n\nThis project focuses on creating an argument parser from the pydantic model.\nMany other projects hide `ArgumentParser` in the library, but it is difficult to use in complicated cases.\nFor example nested sub parser; i.e. `aws s3 cp <some options>`, or nested pydantic model is not supported.\nThis library achieve that you can easily add complicate uses.\n\n## Example 1\n\n```python\nfrom argparse import ArgumentParser\nfrom pydantic import BaseModel, Field\nfrom pydantic_argparse_builder import build_parser\n\nclass Config(BaseModel):\n    string: str = Field(description=\"string parameter\")\n    integer: int = Field(description=\"integer parameter\")\n\nparser = ArgumentParser()\nbuild_parser(parser)\nparser.print_help()\n```\n\n```\nusage: basic.py [-h] --string STRING --integer INTEGER\n\noptional arguments:\n  -h, --help            show this help message and exit\n\nConfig:\n  --string STRING, -s STRING\n                        a required string\n  --integer INTEGER, -i INTEGER\n                        a required integer\n```\n\n## Example 2\n\n```python\nfrom argparse import ArgumentParser\nfrom pydantic import BaseModel, Field\nfrom pydantic_argparse_builder import build_parser\n\nclass SubConfigA(BaseModel):\n    string: str = Field(description=\"string parameter\")\n    integer: int = Field(description=\"integer parameter\")\n\nclass SubConfigB(BaseModel):\n    double: float = Field(description=\"a required string\")\n    integer: int = Field(0, description=\"a required integer\")\n\n\nparser = ArgumentParser()\nsubparsers = parser.add_subparsers()\nbuild_parser(subparsers.add_parser(\"alpha\"), SubConfigA)\nbuild_parser(subparsers.add_parser(\"beta\"), SubConfigB)\nparser.print_help()\n```\n\n```\nusage: sub_parser.py [-h] {alpha,beta} ...\n\npositional arguments:\n  {alpha,beta}\n\noptional arguments:\n  -h, --help    show this help message and exit\n```\n\n## Additional config\nBehaviour of pydantic can be controlled via the `Config` class or extra arguments of `Field`.\n`Config` is affected all fields.\nExtra arguments of `Field` is affected specific field. \n\n\n<dl>\n  <dt><code>cli_disable_prefix</code></dt>\n  <dd>Prefix of argument of boolean type for `store_false`. Default to <code>--disable-</code></dd>\n\n  <dt><code>cli_enable_prefix</code></dt>\n  <dd>Prefix of argument of boolean type for `store_true`. Default to <code>--enable-</code></dd>\n\n</dl>\n\n\n## Future works\n\n- [ ]: Options completion for bash\n",
    "bugtrack_url": null,
    "license": "Apache-2.0",
    "summary": "Build ArgumentParser from pydantic model.",
    "version": "0.3.1",
    "project_urls": null,
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "013364f6c802299e51b9146914bba8d3e4ec12bf06df24301dd21f2e78cfec7e",
                "md5": "bdae62ba7f4551f322e92be64dd003d9",
                "sha256": "630851ef999e15024ef6fafab1b45c8db30be2b4ed5582b715f87563875d7ad1"
            },
            "downloads": -1,
            "filename": "pydantic_argparse_builder-0.3.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "bdae62ba7f4551f322e92be64dd003d9",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8,<4.0",
            "size": 11009,
            "upload_time": "2023-08-01T16:31:35",
            "upload_time_iso_8601": "2023-08-01T16:31:35.153550Z",
            "url": "https://files.pythonhosted.org/packages/01/33/64f6c802299e51b9146914bba8d3e4ec12bf06df24301dd21f2e78cfec7e/pydantic_argparse_builder-0.3.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "bc92dd830c97d39c46d8825f5447c93c0c92b1090b4669ae9aea0cfde2de2924",
                "md5": "db802249aa00e7884d567a267638977b",
                "sha256": "65d84d6bd71ce515b42f31fdb8b1933568b8494276f38f1d2999e31dc58c3adf"
            },
            "downloads": -1,
            "filename": "pydantic_argparse_builder-0.3.1.tar.gz",
            "has_sig": false,
            "md5_digest": "db802249aa00e7884d567a267638977b",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8,<4.0",
            "size": 9354,
            "upload_time": "2023-08-01T16:31:38",
            "upload_time_iso_8601": "2023-08-01T16:31:38.450168Z",
            "url": "https://files.pythonhosted.org/packages/bc/92/dd830c97d39c46d8825f5447c93c0c92b1090b4669ae9aea0cfde2de2924/pydantic_argparse_builder-0.3.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-08-01 16:31:38",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "lcname": "pydantic-argparse-builder"
}
        
Elapsed time: 0.12402s