datamodel-code-generator0.50.0
datamodel-code-generator0.50.0
Published
Datamodel Code Generator
pip install datamodel-code-generator
Package Downloads
Authors
Requires Python
>=3.10
Dependencies
- argcomplete
<4,>=2.10.1 - black
>=19.10b0 - genson
<2,>=1.2.1 - inflect
<8,>=4.1 - isort
<8,>=4.3.21 - jinja2
<4,>=2.10.1 - packaging
- pydantic
>=1.5 - pyyaml
>=6.0.1 - tomli
<3,>=2.2.1; python_version <= "3.11" - graphql-core
>=3.2.3; extra == "all" - httpx
>=0.24.1; extra == "all" - openapi-spec-validator
<0.8,>=0.2.8; extra == "all" - prance
>=0.18.2; extra == "all" - pysnooper
<2,>=0.4.1; extra == "all" - ruff
>=0.9.10; extra == "all" - watchfiles
>=1.1; extra == "all" - pysnooper
<2,>=0.4.1; extra == "debug" - graphql-core
>=3.2.3; extra == "graphql" - httpx
>=0.24.1; extra == "http" - ruff
>=0.9.10; extra == "ruff" - openapi-spec-validator
<0.8,>=0.2.8; extra == "validation" - prance
>=0.18.2; extra == "validation" - watchfiles
>=1.1; extra == "watch"
datamodel-code-generator
🚀 Generate Python data models from schema definitions in seconds.
✨ What it does
- 📄 Converts OpenAPI 3, JSON Schema, GraphQL, and raw data (JSON/YAML/CSV) into Python models
- 🐍 Generates from existing Python types (Pydantic, dataclass, TypedDict) via
--input-model - 🎯 Generates Pydantic v1/v2, dataclasses, TypedDict, or msgspec output
- 🔗 Handles complex schemas:
$ref,allOf,oneOf,anyOf, enums, and nested types - ✅ Produces type-safe, validated code ready for your IDE and type checker
📖 Documentation
👉 datamodel-code-generator.koxudaxi.dev
- 🖥️ CLI Reference - All command-line options
- ⚙️ pyproject.toml - Configuration file
- 🔄 CI/CD Integration - GitHub Actions, pre-commit hooks
- 🚀 One-liner Usage - uvx, pipx, clipboard integration
- ❓ FAQ - Common questions
📦 Installation
uv tool install datamodel-code-generator
Other installation methods
pip:
pip install datamodel-code-generator
uv (add to project):
uv add datamodel-code-generator
conda:
conda install -c conda-forge datamodel-code-generator
With HTTP support (for resolving remote $ref):
pip install 'datamodel-code-generator[http]'
With GraphQL support:
pip install 'datamodel-code-generator[graphql]'
Docker:
docker pull koxudaxi/datamodel-code-generator
🏃 Quick Start
datamodel-codegen --input schema.json --input-file-type jsonschema --output-model-type pydantic_v2.BaseModel --output model.py
📄 schema.json (input)
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Pet",
"type": "object",
"required": ["name", "species"],
"properties": {
"name": {
"type": "string",
"description": "The pet's name"
},
"species": {
"type": "string",
"enum": ["dog", "cat", "bird", "fish"]
},
"age": {
"type": "integer",
"minimum": 0,
"description": "Age in years"
},
"vaccinated": {
"type": "boolean",
"default": false
}
}
}
🐍 model.py (output)
# generated by datamodel-codegen:
# filename: schema.json
from __future__ import annotations
from enum import Enum
from typing import Optional
from pydantic import BaseModel, Field
class Species(Enum):
dog = 'dog'
cat = 'cat'
bird = 'bird'
fish = 'fish'
class Pet(BaseModel):
name: str = Field(..., description="The pet's name")
species: Species
age: Optional[int] = Field(None, description='Age in years', ge=0)
vaccinated: Optional[bool] = False
📥 Supported Input
- OpenAPI 3 (YAML/JSON)
- JSON Schema
- JSON / YAML / CSV data
- GraphQL schema
- Python types (Pydantic, dataclass, TypedDict) via
--input-model - Python dictionary
📤 Supported Output
- pydantic v1 BaseModel
- pydantic v2 BaseModel
- pydantic v2 dataclass
- dataclasses
- TypedDict
- msgspec Struct
🍳 Common Recipes
🤖 Get CLI Help from LLMs
Generate a prompt to ask LLMs about CLI options:
datamodel-codegen --generate-prompt "Best options for Pydantic v2?" | claude -p
See LLM Integration for more examples.
🌐 Generate from URL
pip install 'datamodel-code-generator[http]'
datamodel-codegen --url https://example.com/api/openapi.yaml --output model.py
⚙️ Use with pyproject.toml
[tool.datamodel-codegen]
input = "schema.yaml"
output = "src/models.py"
output-model-type = "pydantic_v2.BaseModel"
Then simply run:
datamodel-codegen
See pyproject.toml Configuration for more options.
🔄 CI/CD Integration
Validate generated models in your CI pipeline:
- uses: koxudaxi/[email protected]
with:
input: schemas/api.yaml
output: src/models/api.py
See CI/CD Integration for more options.
💖 Sponsors
|
Astral |
🏢 Projects that use datamodel-code-generator
These projects use datamodel-code-generator. See the linked examples for real-world usage.
- PostHog/posthog - Generate models via npm run
- airbytehq/airbyte - Generate Python, Java/Kotlin, and Typescript protocol models
- apache/iceberg - Generate Python code
- open-metadata/OpenMetadata - datamodel_generation.py
- awslabs/aws-lambda-powertools-python - Recommended for advanced-use-cases
- Netflix/consoleme - Generate models from Swagger
- DataDog/integrations-core - Config models
- argoproj-labs/hera - Makefile
- SeldonIO/MLServer - generate-types.sh
- geojupyter/jupytergis - Python type generation from JSONSchema
- Nike-Inc/brickflow - Code generate tools
- cloudcoil/cloudcoil - Model generation
- IBM/compliance-trestle - Building models from OSCAL schemas
- hashintel/hash - codegen.sh
🔗 Related Projects
- fastapi-code-generator - Generate FastAPI app from OpenAPI
- pydantic-pycharm-plugin - PyCharm plugin for Pydantic
🤝 Contributing
See Development & Contributing for how to get started!
📄 License
MIT License - see LICENSE for details.