Génération de code avec datamodel-code-generator¶
Le projet datamodel-code-generator est une bibliothèque et un utilitaire de ligne de commande permettant de générer des modèles pydantiques à partir de presque n'importe quelle source de données, notamment:
- OpenAPI 3 (YAML/JSON)
- Schéma JSON
- Données JSON/YAML/CSV (qui seront converties en schéma JSON)
- Dictionnaire Python (qui sera converti en schéma JSON)
- Schéma GraphQL
Chaque fois que vous vous retrouvez avec un JSON convertible en données mais sans modèles pydantiques, cet outil vous permettra de générer des hiérarchies de modèles de type sécurisé à la demande.
Installation¶
pip install datamodel-code-generator
Exemple¶
Dans ce cas, datamodel-code-generator crée des modèles pydantiques à partir d'un fichier de schéma JSON.
datamodel-codegen --input person.json --input-file-type jsonschema --output model.py
personne.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"
}
}
}
}
}
modèle.py:
# generated by datamodel-codegen:
# filename: person.json
# timestamp: 2020-05-19T15:07:31+00:00
from __future__ import annotations
from typing import Any
from pydantic import BaseModel, Field, conint
class Pet(BaseModel):
name: str | None = None
age: int | None = 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: conint(ge=0) | None = Field(None, description='Age in years.')
pets: list[Pet] | None = None
comment: Any | None = None
Plus d’informations peuvent être trouvées sur la documentation officielle
本文总阅读量次