Describe the bug
Nullable enums are not behaving consistently when generating TypedDicts.
To Reproduce
Example schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "TestModel",
"type": "object",
"definitions": {
"StatusEnum": {
"type": ["string", "null"],
"enum": ["active", "inactive", null]
}
},
"properties": {
"required_inline": {
"type": ["string", "null"],
"enum": ["yes", "no", null]
},
"required_ref": {
"$ref": "#/definitions/StatusEnum"
},
"optional_inline": {
"type": ["string", "null"],
"enum": ["pending", "completed", null]
}
},
"required": ["required_inline", "required_ref"]
}
Used commandline:
datamodel-codegen \
--input-file-type jsonschema \
--input test_schema.json \
--output-model-type typing.TypedDict \
--output generated_model.py
Generated code:
from __future__ import annotations
from typing import Literal, TypeAlias, TypedDict
from typing_extensions import NotRequired
StatusEnum: TypeAlias = Literal['active', 'inactive']
class TestModel(TypedDict):
required_inline: Literal['yes', 'no'] | None
required_ref: StatusEnum
optional_inline: NotRequired[Literal['pending', 'completed']]
The type for required_inline is the only one here that is working as expected.
Expected behavior
Expect the generated code to include None in the StatusEnum type alias, and for optional_inline field's type.
Expected code:
from __future__ import annotations
from typing import Literal, TypeAlias, TypedDict
from typing_extensions import NotRequired
StatusEnum: TypeAlias = Literal['active', 'inactive'] | None
class TestModel(TypedDict):
required_inline: Literal['yes', 'no'] | None
required_ref: StatusEnum
optional_inline: NotRequired[Literal['pending', 'completed'] | None]
Version:
- Python version: 3.12
- datamodel-code-generator version: 0.53.0
Describe the bug
Nullable enums are not behaving consistently when generating TypedDicts.
To Reproduce
Example schema:
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "title": "TestModel", "type": "object", "definitions": { "StatusEnum": { "type": ["string", "null"], "enum": ["active", "inactive", null] } }, "properties": { "required_inline": { "type": ["string", "null"], "enum": ["yes", "no", null] }, "required_ref": { "$ref": "#/definitions/StatusEnum" }, "optional_inline": { "type": ["string", "null"], "enum": ["pending", "completed", null] } }, "required": ["required_inline", "required_ref"] }Used commandline:
Generated code:
The type for
required_inlineis the only one here that is working as expected.Expected behavior
Expect the generated code to include
Nonein theStatusEnumtype alias, and foroptional_inlinefield's type.Expected code:
Version: