From 9aafca5ebbadb9b050fe61425495d5fc608f176f Mon Sep 17 00:00:00 2001 From: Koudai Aono Date: Wed, 20 May 2020 01:05:31 +0900 Subject: [PATCH 1/3] Add datamodel-code-generator link in pydantic document site. --- changes/1500-koxudaxi.md | 1 + docs/datamodel_code_generator.md | 78 +++++++++++++++++++ docs/examples/generate_models_person_model.py | 17 ++++ mkdocs.yml | 1 + 4 files changed, 97 insertions(+) create mode 100644 changes/1500-koxudaxi.md create mode 100644 docs/datamodel_code_generator.md create mode 100644 docs/examples/generate_models_person_model.py diff --git a/changes/1500-koxudaxi.md b/changes/1500-koxudaxi.md new file mode 100644 index 0000000000..a62521162a --- /dev/null +++ b/changes/1500-koxudaxi.md @@ -0,0 +1 @@ +Add datamodel-code-generator link in pydantic document site. \ No newline at end of file diff --git a/docs/datamodel_code_generator.md b/docs/datamodel_code_generator.md new file mode 100644 index 0000000000..b15076aa3b --- /dev/null +++ b/docs/datamodel_code_generator.md @@ -0,0 +1,78 @@ +[datamodel-code-generator](https://github.com/koxudaxi/datamodel-code-generator/) is a command to generate pydantic models from other data types. + + +* Supported source types + * OpenAPI 3 (YAML/JSON) + * JSON Schema + * JSON/YAML Data (It will be converted to JSON Schema) + +## Install +```bash +pip install datamodel-code-generato +``` + +## Example +In this case, The datamodel-code-generator creates pydantic models from JSON Schema. +```bash +datamodel-codegen --input person.json --input-file-type jsonschema --output model.py +``` + +person.json: +```json +{ + "$id": "person.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Person", + "type": "object", + "properties": { + "first_name": { + "type": "string", + "description": "The person's first name." + }, + "last_name": { + "type": "string", + "description": "The person's last name." + }, + "age": { + "description": "Age in years.", + "type": "integer", + "minimum": 0 + }, + "pets": { + "type": "array", + "items": [ + { + "$ref": "#/definitions/Pet" + } + ] + }, + "comment": { + "type": "null" + } + }, + "required": [ + "first_name", + "last_name" + ], + "definitions": { + "Pet": { + "properties": { + "name": { + "type": "string" + }, + "age": { + "type": "integer" + } + } + } + } +} +``` + +model.py: +```py +{!.tmp_examples/generate_models_person_model.py!} +``` + +More information can be found on the +[official documentation](https://koxudaxi.github.io/datamodel-code-generator/) diff --git a/docs/examples/generate_models_person_model.py b/docs/examples/generate_models_person_model.py new file mode 100644 index 0000000000..b32198c143 --- /dev/null +++ b/docs/examples/generate_models_person_model.py @@ -0,0 +1,17 @@ +# generated by datamodel-codegen: +# filename: person.json +# timestamp: 2020-05-19T15:07:31+00:00 +from __future__ import annotations +from typing import Any, List, Optional +from pydantic import BaseModel, Field, conint + +class Pet(BaseModel): + name: Optional[str] = None + age: Optional[int] = None + +class Person(BaseModel): + first_name: str = Field(..., description="The person's first name.") + last_name: str = Field(..., description="The person's last name.") + age: Optional[conint(ge=0)] = Field(None, description='Age in years.') + pets: Optional[List[Pet]] = None + comment: Optional[Any] = None diff --git a/mkdocs.yml b/mkdocs.yml index bb7392ae9a..5c2fe6283a 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -46,6 +46,7 @@ nav: - benchmarks.md - 'Mypy plugin': mypy_plugin.md - 'PyCharm plugin': pycharm_plugin.md +- 'datamodel-code-generator': datamodel_code_generator.md - changelog.md markdown_extensions: From 3df5523123b3986b8e10fa45a7cbf5cd26b7dbb0 Mon Sep 17 00:00:00 2001 From: Samuel Colvin Date: Sun, 31 May 2020 14:57:11 +0100 Subject: [PATCH 2/3] tweak menu --- mkdocs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mkdocs.yml b/mkdocs.yml index 5c2fe6283a..ea06c4f65f 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -46,7 +46,7 @@ nav: - benchmarks.md - 'Mypy plugin': mypy_plugin.md - 'PyCharm plugin': pycharm_plugin.md -- 'datamodel-code-generator': datamodel_code_generator.md +- 'Code Generation': datamodel_code_generator.md - changelog.md markdown_extensions: From 66dfa27c3f127d40576e8bd5150ac4621fdc277b Mon Sep 17 00:00:00 2001 From: Samuel Colvin Date: Sun, 31 May 2020 15:03:44 +0100 Subject: [PATCH 3/3] fix blank lines --- docs/examples/generate_models_person_model.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/examples/generate_models_person_model.py b/docs/examples/generate_models_person_model.py index b32198c143..a846938a82 100644 --- a/docs/examples/generate_models_person_model.py +++ b/docs/examples/generate_models_person_model.py @@ -5,10 +5,12 @@ from typing import Any, List, Optional from pydantic import BaseModel, Field, conint + class Pet(BaseModel): name: Optional[str] = None age: Optional[int] = None + class Person(BaseModel): first_name: str = Field(..., description="The person's first name.") last_name: str = Field(..., description="The person's last name.")