Lewati ke isi

Pembuatan Kode dengan generator kode model data

Proyek datamodel-code-generator adalah pustaka dan utilitas baris perintah untuk menghasilkan model pydantic dari hampir semua sumber data, termasuk:

  • OpenAPI 3 (YAML/JSON)
  • Skema JSON
  • Data JSON/YAML/CSV (yang akan dikonversi ke Skema JSON)
  • Kamus Python (yang akan dikonversi ke Skema JSON)
  • Skema GraphQL

Kapan pun Anda menemukan JSON data yang dapat dikonversi tetapi tanpa model pydantic, alat ini akan memungkinkan Anda membuat hierarki model yang aman untuk tipe sesuai permintaan.

Instalasi

pip install datamodel-code-generator

Contoh

Dalam hal ini, datamodel-code-generator membuat model pydantic dari file Skema JSON.

datamodel-codegen  --input person.json --input-file-type jsonschema --output model.py

person.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:

# 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

Informasi lebih lanjut dapat ditemukan di dokumentasi resmi


本文总阅读量