|
17 | 17 | | [`--no-alias`](#no-alias) | Disable Field alias generation for non-Python-safe property ... | |
18 | 18 | | [`--original-field-name-delimiter`](#original-field-name-delimiter) | Specify delimiter for original field names when using snake-... | |
19 | 19 | | [`--remove-special-field-name-prefix`](#remove-special-field-name-prefix) | Remove the special prefix from field names. | |
| 20 | +| [`--serialization-aliases`](#serialization-aliases) | Apply custom Pydantic v2 serialization aliases from JSON fil... | |
20 | 21 | | [`--set-default-enum-member`](#set-default-enum-member) | Set the first enum member as the default value for enum fiel... | |
21 | 22 | | [`--snake-case-field`](#snake-case-field) | Convert field names to snake_case format. | |
22 | 23 | | [`--special-field-name-prefix`](#special-field-name-prefix) | Prefix to add to special field names (like reserved keywords... | |
@@ -1951,6 +1952,294 @@ The `--remove-special-field-name-prefix` flag configures the code generation beh |
1951 | 1952 |
|
1952 | 1953 | --- |
1953 | 1954 |
|
| 1955 | +## `--serialization-aliases` {#serialization-aliases} |
| 1956 | + |
| 1957 | +Apply custom Pydantic v2 serialization aliases from JSON file. |
| 1958 | + |
| 1959 | +The `--serialization-aliases` option lets Pydantic v2 models keep input aliases |
| 1960 | +or validation aliases while using separate output-only names for serialization. |
| 1961 | + |
| 1962 | +!!! tip "Usage" |
| 1963 | + |
| 1964 | + ```bash |
| 1965 | + datamodel-codegen --input schema.json --aliases aliases/serialization_aliases.json --serialization-aliases aliases/serialization_aliases_output.json --output-model-type pydantic_v2.BaseModel # (1)! |
| 1966 | + ``` |
| 1967 | + |
| 1968 | + 1. :material-arrow-left: `--serialization-aliases` - the option documented here |
| 1969 | + |
| 1970 | +??? example "Examples" |
| 1971 | + |
| 1972 | + **Input Schema:** |
| 1973 | + |
| 1974 | + ```json |
| 1975 | + { |
| 1976 | + "$schema": "http://json-schema.org/draft-07/schema#", |
| 1977 | + "title": "Messaging", |
| 1978 | + "type": "object", |
| 1979 | + "definitions": { |
| 1980 | + "SendMessageV2": { |
| 1981 | + "type": "object", |
| 1982 | + "properties": { |
| 1983 | + "textMessage": { |
| 1984 | + "type": "string" |
| 1985 | + } |
| 1986 | + }, |
| 1987 | + "required": ["textMessage"] |
| 1988 | + }, |
| 1989 | + "OtherMessage": { |
| 1990 | + "type": "object", |
| 1991 | + "properties": { |
| 1992 | + "other-name": { |
| 1993 | + "type": "string" |
| 1994 | + } |
| 1995 | + }, |
| 1996 | + "required": ["other-name"] |
| 1997 | + }, |
| 1998 | + "SameNameMessage": { |
| 1999 | + "type": "object", |
| 2000 | + "properties": { |
| 2001 | + "same-name": { |
| 2002 | + "type": "string" |
| 2003 | + } |
| 2004 | + }, |
| 2005 | + "required": ["same-name"] |
| 2006 | + }, |
| 2007 | + "RequiredOnlyMessage": { |
| 2008 | + "type": "object", |
| 2009 | + "allOf": [ |
| 2010 | + { |
| 2011 | + "type": "object", |
| 2012 | + "properties": { |
| 2013 | + "known-name": { |
| 2014 | + "type": "string" |
| 2015 | + } |
| 2016 | + }, |
| 2017 | + "required": ["known-name", "missing-required", "plain-missing"] |
| 2018 | + } |
| 2019 | + ], |
| 2020 | + "required": ["known-name", "missing-required", "plain-missing"] |
| 2021 | + }, |
| 2022 | + "RequiredOnlyGrandBase": { |
| 2023 | + "type": "object", |
| 2024 | + "properties": { |
| 2025 | + "grand-name": { |
| 2026 | + "type": "integer" |
| 2027 | + }, |
| 2028 | + "bare-name": {} |
| 2029 | + }, |
| 2030 | + "required": ["grand-name", "bare-name"] |
| 2031 | + }, |
| 2032 | + "RequiredOnlyBase": { |
| 2033 | + "type": "object", |
| 2034 | + "properties": { |
| 2035 | + "base-name": { |
| 2036 | + "type": "string" |
| 2037 | + } |
| 2038 | + }, |
| 2039 | + "allOf": [ |
| 2040 | + { |
| 2041 | + "$ref": "#/definitions/RequiredOnlyGrandBase" |
| 2042 | + } |
| 2043 | + ], |
| 2044 | + "required": ["base-name"] |
| 2045 | + }, |
| 2046 | + "RequiredOnlyRefMessage": { |
| 2047 | + "type": "object", |
| 2048 | + "properties": { |
| 2049 | + "own-name": { |
| 2050 | + "type": "string" |
| 2051 | + } |
| 2052 | + }, |
| 2053 | + "allOf": [ |
| 2054 | + { |
| 2055 | + "$ref": "#/definitions/RequiredOnlyBase" |
| 2056 | + } |
| 2057 | + ], |
| 2058 | + "required": [ |
| 2059 | + "own-name", |
| 2060 | + "grand-name", |
| 2061 | + "bare-name", |
| 2062 | + "ignored-missing", |
| 2063 | + "ref-missing-required", |
| 2064 | + "ref-plain-missing" |
| 2065 | + ] |
| 2066 | + }, |
| 2067 | + "RequiredOnlyEmptyAllOfBase": { |
| 2068 | + "type": "object", |
| 2069 | + "allOf": [ |
| 2070 | + { |
| 2071 | + "type": "object" |
| 2072 | + } |
| 2073 | + ] |
| 2074 | + }, |
| 2075 | + "RequiredOnlyEmptyAllOfMessage": { |
| 2076 | + "type": "object", |
| 2077 | + "allOf": [ |
| 2078 | + { |
| 2079 | + "$ref": "#/definitions/RequiredOnlyEmptyAllOfBase" |
| 2080 | + } |
| 2081 | + ], |
| 2082 | + "required": ["empty-missing"] |
| 2083 | + }, |
| 2084 | + "RequiredOnlyRecursiveEmptyGrandBase": { |
| 2085 | + "type": "object", |
| 2086 | + "properties": { |
| 2087 | + "unrelated-name": { |
| 2088 | + "type": "string" |
| 2089 | + } |
| 2090 | + } |
| 2091 | + }, |
| 2092 | + "RequiredOnlyRecursiveEmptyBase": { |
| 2093 | + "type": "object", |
| 2094 | + "allOf": [ |
| 2095 | + { |
| 2096 | + "$ref": "#/definitions/RequiredOnlyRecursiveEmptyGrandBase" |
| 2097 | + } |
| 2098 | + ] |
| 2099 | + }, |
| 2100 | + "RequiredOnlyRecursiveEmptyMessage": { |
| 2101 | + "type": "object", |
| 2102 | + "allOf": [ |
| 2103 | + { |
| 2104 | + "$ref": "#/definitions/RequiredOnlyRecursiveEmptyBase" |
| 2105 | + } |
| 2106 | + ], |
| 2107 | + "required": ["recursive-missing"] |
| 2108 | + } |
| 2109 | + }, |
| 2110 | + "properties": { |
| 2111 | + "send": { |
| 2112 | + "$ref": "#/definitions/SendMessageV2" |
| 2113 | + }, |
| 2114 | + "other": { |
| 2115 | + "$ref": "#/definitions/OtherMessage" |
| 2116 | + }, |
| 2117 | + "same": { |
| 2118 | + "$ref": "#/definitions/SameNameMessage" |
| 2119 | + }, |
| 2120 | + "requiredOnly": { |
| 2121 | + "$ref": "#/definitions/RequiredOnlyMessage" |
| 2122 | + }, |
| 2123 | + "requiredOnlyRef": { |
| 2124 | + "$ref": "#/definitions/RequiredOnlyRefMessage" |
| 2125 | + }, |
| 2126 | + "requiredOnlyEmptyAllOf": { |
| 2127 | + "$ref": "#/definitions/RequiredOnlyEmptyAllOfMessage" |
| 2128 | + }, |
| 2129 | + "requiredOnlyRecursiveEmpty": { |
| 2130 | + "$ref": "#/definitions/RequiredOnlyRecursiveEmptyMessage" |
| 2131 | + } |
| 2132 | + } |
| 2133 | + } |
| 2134 | + ``` |
| 2135 | + |
| 2136 | + **Output:** |
| 2137 | + |
| 2138 | + ```python |
| 2139 | + # generated by datamodel-codegen: |
| 2140 | + # filename: serialization_aliases.json |
| 2141 | + # timestamp: 2019-07-26T00:00:00+00:00 |
| 2142 | + |
| 2143 | + from __future__ import annotations |
| 2144 | + |
| 2145 | + from typing import Any |
| 2146 | + |
| 2147 | + from pydantic import AliasChoices, BaseModel, Field |
| 2148 | + |
| 2149 | + |
| 2150 | + class SendMessageV2(BaseModel): |
| 2151 | + message: str = Field( |
| 2152 | + ..., |
| 2153 | + serialization_alias='messageText', |
| 2154 | + validation_alias=AliasChoices('textMessage', 'message', 'text'), |
| 2155 | + ) |
| 2156 | + |
| 2157 | + |
| 2158 | + class OtherMessage(BaseModel): |
| 2159 | + other_name: str = Field(..., alias='other-name', serialization_alias='otherName') |
| 2160 | + |
| 2161 | + |
| 2162 | + class SameNameMessage(BaseModel): |
| 2163 | + same_name: str = Field(..., alias='same-name', serialization_alias='same_name') |
| 2164 | + |
| 2165 | + |
| 2166 | + class RequiredOnlyMessage(BaseModel): |
| 2167 | + known_name: str = Field(..., alias='known-name') |
| 2168 | + missingRequiredInput: Any = Field( |
| 2169 | + ..., |
| 2170 | + serialization_alias='missingRequired', |
| 2171 | + validation_alias=AliasChoices('missing-required', 'missingRequiredInput'), |
| 2172 | + ) |
| 2173 | + plainMissingInput: Any = Field( |
| 2174 | + ..., alias='plain-missing', serialization_alias='plainMissing' |
| 2175 | + ) |
| 2176 | + |
| 2177 | + |
| 2178 | + class RequiredOnlyGrandBase(BaseModel): |
| 2179 | + grand_name: int = Field(..., alias='grand-name') |
| 2180 | + bare_name: Any = Field(..., alias='bare-name') |
| 2181 | + |
| 2182 | + |
| 2183 | + class RequiredOnlyBase(RequiredOnlyGrandBase): |
| 2184 | + base_name: str = Field(..., alias='base-name') |
| 2185 | + |
| 2186 | + |
| 2187 | + class RequiredOnlyRefMessage(RequiredOnlyBase): |
| 2188 | + own_name: str = Field(..., alias='own-name') |
| 2189 | + grand_name: int = Field( |
| 2190 | + ..., |
| 2191 | + serialization_alias='grandName', |
| 2192 | + validation_alias=AliasChoices('grand-name', 'grandInput'), |
| 2193 | + ) |
| 2194 | + bare_name: Any = Field(..., alias='bare-name', serialization_alias='bareName') |
| 2195 | + refMissingInput: Any = Field( |
| 2196 | + ..., |
| 2197 | + serialization_alias='refMissingRequired', |
| 2198 | + validation_alias=AliasChoices('ref-missing-required', 'refMissingInput'), |
| 2199 | + ) |
| 2200 | + refPlainMissingInput: Any = Field( |
| 2201 | + ..., alias='ref-plain-missing', serialization_alias='refPlainMissing' |
| 2202 | + ) |
| 2203 | + |
| 2204 | + |
| 2205 | + class RequiredOnlyEmptyAllOfBase(BaseModel): |
| 2206 | + pass |
| 2207 | + |
| 2208 | + |
| 2209 | + class RequiredOnlyEmptyAllOfMessage(RequiredOnlyEmptyAllOfBase): |
| 2210 | + emptyMissingInput: Any = Field( |
| 2211 | + ..., |
| 2212 | + serialization_alias='emptyMissing', |
| 2213 | + validation_alias=AliasChoices('empty-missing', 'emptyMissingInput'), |
| 2214 | + ) |
| 2215 | + |
| 2216 | + |
| 2217 | + class RequiredOnlyRecursiveEmptyGrandBase(BaseModel): |
| 2218 | + unrelated_name: str | None = Field(None, alias='unrelated-name') |
| 2219 | + |
| 2220 | + |
| 2221 | + class RequiredOnlyRecursiveEmptyBase(RequiredOnlyRecursiveEmptyGrandBase): |
| 2222 | + pass |
| 2223 | + |
| 2224 | + |
| 2225 | + class RequiredOnlyRecursiveEmptyMessage(RequiredOnlyRecursiveEmptyBase): |
| 2226 | + recursiveMissingInput: Any = Field( |
| 2227 | + ..., alias='recursive-missing', serialization_alias='recursiveMissing' |
| 2228 | + ) |
| 2229 | + |
| 2230 | + |
| 2231 | + class Messaging(BaseModel): |
| 2232 | + send: SendMessageV2 | None = None |
| 2233 | + other: OtherMessage | None = None |
| 2234 | + same: SameNameMessage | None = None |
| 2235 | + requiredOnly: RequiredOnlyMessage | None = None |
| 2236 | + requiredOnlyRef: RequiredOnlyRefMessage | None = None |
| 2237 | + requiredOnlyEmptyAllOf: RequiredOnlyEmptyAllOfMessage | None = None |
| 2238 | + requiredOnlyRecursiveEmpty: RequiredOnlyRecursiveEmptyMessage | None = None |
| 2239 | + ``` |
| 2240 | + |
| 2241 | +--- |
| 2242 | + |
1954 | 2243 | ## `--set-default-enum-member` {#set-default-enum-member} |
1955 | 2244 |
|
1956 | 2245 | Set the first enum member as the default value for enum fields. |
|
0 commit comments