Skip to content

Commit 5b66f67

Browse files
docs: sync generated docs (#3148)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 parent df5b218 commit 5b66f67

3 files changed

Lines changed: 320 additions & 4 deletions

File tree

docs/cli-reference/field-customization.md

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2014,10 +2014,20 @@ or validation aliases while using separate output-only names for serialization.
20142014
"type": "string"
20152015
}
20162016
},
2017-
"required": ["known-name", "missing-required", "plain-missing"]
2017+
"required": [
2018+
"known-name",
2019+
"missing-required",
2020+
"plain-missing",
2021+
"allof-unmapped"
2022+
]
20182023
}
20192024
],
2020-
"required": ["known-name", "missing-required", "plain-missing"]
2025+
"required": [
2026+
"known-name",
2027+
"missing-required",
2028+
"plain-missing",
2029+
"allof-unmapped"
2030+
]
20212031
},
20222032
"RequiredOnlyGrandBase": {
20232033
"type": "object",
@@ -2173,6 +2183,7 @@ or validation aliases while using separate output-only names for serialization.
21732183
plainMissingInput: Any = Field(
21742184
..., alias='plain-missing', serialization_alias='plainMissing'
21752185
)
2186+
allof_unmapped: Any = Field(..., alias='allof-unmapped')
21762187

21772188

21782189
class RequiredOnlyGrandBase(BaseModel):
@@ -2192,6 +2203,7 @@ or validation aliases while using separate output-only names for serialization.
21922203
validation_alias=AliasChoices('grand-name', 'grandInput'),
21932204
)
21942205
bare_name: Any = Field(..., alias='bare-name', serialization_alias='bareName')
2206+
ignored_missing: Any = Field(..., alias='ignored-missing')
21952207
refMissingInput: Any = Field(
21962208
...,
21972209
serialization_alias='refMissingRequired',

docs/llms-full.txt

Lines changed: 305 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,7 @@ This documentation is auto-generated from test cases.
245245
|----------|---------|-------------|
246246
| 📁 [Base Options](base-options.md) | 10 | Input/output configuration |
247247
| 🔧 [Typing Customization](typing-customization.md) | 29 | Type annotation and import behavior |
248-
| 🏷️ [Field Customization](field-customization.md) | 25 | Field naming and docstring behavior |
248+
| 🏷️ [Field Customization](field-customization.md) | 26 | Field naming and docstring behavior |
249249
| 🏗️ [Model Customization](model-customization.md) | 39 | Model generation behavior |
250250
| 🎨 [Template Customization](template-customization.md) | 21 | Output formatting and custom rendering |
251251
| 📘 [OpenAPI-only Options](openapi-only-options.md) | 7 | OpenAPI-specific features |
@@ -403,6 +403,7 @@ This documentation is auto-generated from test cases.
403403

404404
- [`--schema-version`](base-options.md#schema-version)
405405
- [`--schema-version-mode`](base-options.md#schema-version-mode)
406+
- [`--serialization-aliases`](field-customization.md#serialization-aliases)
406407
- [`--set-default-enum-member`](field-customization.md#set-default-enum-member)
407408
- [`--shared-module-name`](general-options.md#shared-module-name)
408409
- [`--skip-root-model`](model-customization.md#skip-root-model)
@@ -7481,6 +7482,7 @@ Source: https://datamodel-code-generator.koxudaxi.dev/cli-reference/field-custom
74817482
| [`--no-alias`](#no-alias) | Disable Field alias generation for non-Python-safe property ... |
74827483
| [`--original-field-name-delimiter`](#original-field-name-delimiter) | Specify delimiter for original field names when using snake-... |
74837484
| [`--remove-special-field-name-prefix`](#remove-special-field-name-prefix) | Remove the special prefix from field names. |
7485+
| [`--serialization-aliases`](#serialization-aliases) | Apply custom Pydantic v2 serialization aliases from JSON fil... |
74847486
| [`--set-default-enum-member`](#set-default-enum-member) | Set the first enum member as the default value for enum fiel... |
74857487
| [`--snake-case-field`](#snake-case-field) | Convert field names to snake_case format. |
74867488
| [`--special-field-name-prefix`](#special-field-name-prefix) | Prefix to add to special field names (like reserved keywords... |
@@ -9415,6 +9417,306 @@ The `--remove-special-field-name-prefix` flag configures the code generation beh
94159417

94169418
---
94179419

9420+
## `--serialization-aliases` {#serialization-aliases}
9421+
9422+
Apply custom Pydantic v2 serialization aliases from JSON file.
9423+
9424+
The `--serialization-aliases` option lets Pydantic v2 models keep input aliases
9425+
or validation aliases while using separate output-only names for serialization.
9426+
9427+
!!! tip "Usage"
9428+
9429+
```bash
9430+
datamodel-codegen --input schema.json --aliases aliases/serialization_aliases.json --serialization-aliases aliases/serialization_aliases_output.json --output-model-type pydantic_v2.BaseModel # (1)!
9431+
```
9432+
9433+
1. :material-arrow-left: `--serialization-aliases` - the option documented here
9434+
9435+
??? example "Examples"
9436+
9437+
**Input Schema:**
9438+
9439+
```json
9440+
{
9441+
"$schema": "http://json-schema.org/draft-07/schema#",
9442+
"title": "Messaging",
9443+
"type": "object",
9444+
"definitions": {
9445+
"SendMessageV2": {
9446+
"type": "object",
9447+
"properties": {
9448+
"textMessage": {
9449+
"type": "string"
9450+
}
9451+
},
9452+
"required": ["textMessage"]
9453+
},
9454+
"OtherMessage": {
9455+
"type": "object",
9456+
"properties": {
9457+
"other-name": {
9458+
"type": "string"
9459+
}
9460+
},
9461+
"required": ["other-name"]
9462+
},
9463+
"SameNameMessage": {
9464+
"type": "object",
9465+
"properties": {
9466+
"same-name": {
9467+
"type": "string"
9468+
}
9469+
},
9470+
"required": ["same-name"]
9471+
},
9472+
"RequiredOnlyMessage": {
9473+
"type": "object",
9474+
"allOf": [
9475+
{
9476+
"type": "object",
9477+
"properties": {
9478+
"known-name": {
9479+
"type": "string"
9480+
}
9481+
},
9482+
"required": [
9483+
"known-name",
9484+
"missing-required",
9485+
"plain-missing",
9486+
"allof-unmapped"
9487+
]
9488+
}
9489+
],
9490+
"required": [
9491+
"known-name",
9492+
"missing-required",
9493+
"plain-missing",
9494+
"allof-unmapped"
9495+
]
9496+
},
9497+
"RequiredOnlyGrandBase": {
9498+
"type": "object",
9499+
"properties": {
9500+
"grand-name": {
9501+
"type": "integer"
9502+
},
9503+
"bare-name": {}
9504+
},
9505+
"required": ["grand-name", "bare-name"]
9506+
},
9507+
"RequiredOnlyBase": {
9508+
"type": "object",
9509+
"properties": {
9510+
"base-name": {
9511+
"type": "string"
9512+
}
9513+
},
9514+
"allOf": [
9515+
{
9516+
"$ref": "#/definitions/RequiredOnlyGrandBase"
9517+
}
9518+
],
9519+
"required": ["base-name"]
9520+
},
9521+
"RequiredOnlyRefMessage": {
9522+
"type": "object",
9523+
"properties": {
9524+
"own-name": {
9525+
"type": "string"
9526+
}
9527+
},
9528+
"allOf": [
9529+
{
9530+
"$ref": "#/definitions/RequiredOnlyBase"
9531+
}
9532+
],
9533+
"required": [
9534+
"own-name",
9535+
"grand-name",
9536+
"bare-name",
9537+
"ignored-missing",
9538+
"ref-missing-required",
9539+
"ref-plain-missing"
9540+
]
9541+
},
9542+
"RequiredOnlyEmptyAllOfBase": {
9543+
"type": "object",
9544+
"allOf": [
9545+
{
9546+
"type": "object"
9547+
}
9548+
]
9549+
},
9550+
"RequiredOnlyEmptyAllOfMessage": {
9551+
"type": "object",
9552+
"allOf": [
9553+
{
9554+
"$ref": "#/definitions/RequiredOnlyEmptyAllOfBase"
9555+
}
9556+
],
9557+
"required": ["empty-missing"]
9558+
},
9559+
"RequiredOnlyRecursiveEmptyGrandBase": {
9560+
"type": "object",
9561+
"properties": {
9562+
"unrelated-name": {
9563+
"type": "string"
9564+
}
9565+
}
9566+
},
9567+
"RequiredOnlyRecursiveEmptyBase": {
9568+
"type": "object",
9569+
"allOf": [
9570+
{
9571+
"$ref": "#/definitions/RequiredOnlyRecursiveEmptyGrandBase"
9572+
}
9573+
]
9574+
},
9575+
"RequiredOnlyRecursiveEmptyMessage": {
9576+
"type": "object",
9577+
"allOf": [
9578+
{
9579+
"$ref": "#/definitions/RequiredOnlyRecursiveEmptyBase"
9580+
}
9581+
],
9582+
"required": ["recursive-missing"]
9583+
}
9584+
},
9585+
"properties": {
9586+
"send": {
9587+
"$ref": "#/definitions/SendMessageV2"
9588+
},
9589+
"other": {
9590+
"$ref": "#/definitions/OtherMessage"
9591+
},
9592+
"same": {
9593+
"$ref": "#/definitions/SameNameMessage"
9594+
},
9595+
"requiredOnly": {
9596+
"$ref": "#/definitions/RequiredOnlyMessage"
9597+
},
9598+
"requiredOnlyRef": {
9599+
"$ref": "#/definitions/RequiredOnlyRefMessage"
9600+
},
9601+
"requiredOnlyEmptyAllOf": {
9602+
"$ref": "#/definitions/RequiredOnlyEmptyAllOfMessage"
9603+
},
9604+
"requiredOnlyRecursiveEmpty": {
9605+
"$ref": "#/definitions/RequiredOnlyRecursiveEmptyMessage"
9606+
}
9607+
}
9608+
}
9609+
```
9610+
9611+
**Output:**
9612+
9613+
```python
9614+
# generated by datamodel-codegen:
9615+
# filename: serialization_aliases.json
9616+
# timestamp: 2019-07-26T00:00:00+00:00
9617+
9618+
from __future__ import annotations
9619+
9620+
from typing import Any
9621+
9622+
from pydantic import AliasChoices, BaseModel, Field
9623+
9624+
9625+
class SendMessageV2(BaseModel):
9626+
message: str = Field(
9627+
...,
9628+
serialization_alias='messageText',
9629+
validation_alias=AliasChoices('textMessage', 'message', 'text'),
9630+
)
9631+
9632+
9633+
class OtherMessage(BaseModel):
9634+
other_name: str = Field(..., alias='other-name', serialization_alias='otherName')
9635+
9636+
9637+
class SameNameMessage(BaseModel):
9638+
same_name: str = Field(..., alias='same-name', serialization_alias='same_name')
9639+
9640+
9641+
class RequiredOnlyMessage(BaseModel):
9642+
known_name: str = Field(..., alias='known-name')
9643+
missingRequiredInput: Any = Field(
9644+
...,
9645+
serialization_alias='missingRequired',
9646+
validation_alias=AliasChoices('missing-required', 'missingRequiredInput'),
9647+
)
9648+
plainMissingInput: Any = Field(
9649+
..., alias='plain-missing', serialization_alias='plainMissing'
9650+
)
9651+
allof_unmapped: Any = Field(..., alias='allof-unmapped')
9652+
9653+
9654+
class RequiredOnlyGrandBase(BaseModel):
9655+
grand_name: int = Field(..., alias='grand-name')
9656+
bare_name: Any = Field(..., alias='bare-name')
9657+
9658+
9659+
class RequiredOnlyBase(RequiredOnlyGrandBase):
9660+
base_name: str = Field(..., alias='base-name')
9661+
9662+
9663+
class RequiredOnlyRefMessage(RequiredOnlyBase):
9664+
own_name: str = Field(..., alias='own-name')
9665+
grand_name: int = Field(
9666+
...,
9667+
serialization_alias='grandName',
9668+
validation_alias=AliasChoices('grand-name', 'grandInput'),
9669+
)
9670+
bare_name: Any = Field(..., alias='bare-name', serialization_alias='bareName')
9671+
ignored_missing: Any = Field(..., alias='ignored-missing')
9672+
refMissingInput: Any = Field(
9673+
...,
9674+
serialization_alias='refMissingRequired',
9675+
validation_alias=AliasChoices('ref-missing-required', 'refMissingInput'),
9676+
)
9677+
refPlainMissingInput: Any = Field(
9678+
..., alias='ref-plain-missing', serialization_alias='refPlainMissing'
9679+
)
9680+
9681+
9682+
class RequiredOnlyEmptyAllOfBase(BaseModel):
9683+
pass
9684+
9685+
9686+
class RequiredOnlyEmptyAllOfMessage(RequiredOnlyEmptyAllOfBase):
9687+
emptyMissingInput: Any = Field(
9688+
...,
9689+
serialization_alias='emptyMissing',
9690+
validation_alias=AliasChoices('empty-missing', 'emptyMissingInput'),
9691+
)
9692+
9693+
9694+
class RequiredOnlyRecursiveEmptyGrandBase(BaseModel):
9695+
unrelated_name: str | None = Field(None, alias='unrelated-name')
9696+
9697+
9698+
class RequiredOnlyRecursiveEmptyBase(RequiredOnlyRecursiveEmptyGrandBase):
9699+
pass
9700+
9701+
9702+
class RequiredOnlyRecursiveEmptyMessage(RequiredOnlyRecursiveEmptyBase):
9703+
recursiveMissingInput: Any = Field(
9704+
..., alias='recursive-missing', serialization_alias='recursiveMissing'
9705+
)
9706+
9707+
9708+
class Messaging(BaseModel):
9709+
send: SendMessageV2 | None = None
9710+
other: OtherMessage | None = None
9711+
same: SameNameMessage | None = None
9712+
requiredOnly: RequiredOnlyMessage | None = None
9713+
requiredOnlyRef: RequiredOnlyRefMessage | None = None
9714+
requiredOnlyEmptyAllOf: RequiredOnlyEmptyAllOfMessage | None = None
9715+
requiredOnlyRecursiveEmpty: RequiredOnlyRecursiveEmptyMessage | None = None
9716+
```
9717+
9718+
---
9719+
94189720
## `--set-default-enum-member` {#set-default-enum-member}
94199721

94209722
Set the first enum member as the default value for enum fields.
@@ -24114,6 +24416,7 @@ datamodel-codegen [OPTIONS]
2411424416
| [`--no-alias`](field-customization.md#no-alias) | Disable Field alias generation for non-Python-safe property names. |
2411524417
| [`--original-field-name-delimiter`](field-customization.md#original-field-name-delimiter) | Specify delimiter for original field names when using snake-case conversion. |
2411624418
| [`--remove-special-field-name-prefix`](field-customization.md#remove-special-field-name-prefix) | Remove the special prefix from field names. |
24419+
| [`--serialization-aliases`](field-customization.md#serialization-aliases) | Apply custom Pydantic v2 serialization aliases from JSON file. |
2411724420
| [`--set-default-enum-member`](field-customization.md#set-default-enum-member) | Set the first enum member as the default value for enum fields. |
2411824421
| [`--snake-case-field`](field-customization.md#snake-case-field) | Convert field names to snake_case format. |
2411924422
| [`--special-field-name-prefix`](field-customization.md#special-field-name-prefix) | Prefix to add to special field names (like reserved keywords). |
@@ -24352,6 +24655,7 @@ All options sorted alphabetically:
2435224655
- [`--reuse-scope`](model-customization.md#reuse-scope) - Scope for model reuse detection (root or tree).
2435324656
- [`--schema-version`](base-options.md#schema-version) - Schema version to use for parsing.
2435424657
- [`--schema-version-mode`](base-options.md#schema-version-mode) - Schema version validation mode.
24658+
- [`--serialization-aliases`](field-customization.md#serialization-aliases) - Apply custom Pydantic v2 serialization aliases from JSON fil...
2435524659
- [`--set-default-enum-member`](field-customization.md#set-default-enum-member) - Set the first enum member as the default value for enum fiel...
2435624660
- [`--shared-module-name`](general-options.md#shared-module-name) - Customize the name of the shared module for deduplicated mod...
2435724661
- [`--skip-root-model`](model-customization.md#skip-root-model) - Skip generation of root model when schema contains nested de...

src/datamodel_code_generator/prompt_data.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,8 +100,8 @@
100100
"--reuse-scope": "Scope for model reuse detection (root or tree).",
101101
"--schema-version": "Schema version to use for parsing.",
102102
"--schema-version-mode": "Schema version validation mode.",
103-
"--set-default-enum-member": "Set the first enum member as the default value for enum fields.",
104103
"--serialization-aliases": "Apply custom Pydantic v2 serialization aliases from JSON file.",
104+
"--set-default-enum-member": "Set the first enum member as the default value for enum fields.",
105105
"--shared-module-name": "Customize the name of the shared module for deduplicated models.",
106106
"--skip-root-model": "Skip generation of root model when schema contains nested definitions.",
107107
"--snake-case-field": "Convert field names to snake_case format.",

0 commit comments

Comments
 (0)