Skip to content

Commit ef68905

Browse files
committed
Restore _try_rebuild_model and test_input_model_config_class after merge
1 parent 417ac76 commit ef68905

2 files changed

Lines changed: 44 additions & 0 deletions

File tree

src/datamodel_code_generator/__main__.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1070,6 +1070,37 @@ def _filter_defs_by_strategy(
10701070
return {**schema, "$defs": new_defs}
10711071

10721072

1073+
def _try_rebuild_model(obj: type) -> None:
1074+
"""Try to rebuild a Pydantic model, handling config models specially."""
1075+
module = getattr(obj, "__module__", "")
1076+
class_name = getattr(obj, "__name__", "")
1077+
config_classes = {"GenerateConfig", "ParserConfig", "ParseConfig"}
1078+
if module in {"datamodel_code_generator.config", "config"} and class_name in config_classes:
1079+
from datamodel_code_generator.model.base import DataModel, DataModelFieldBase # noqa: PLC0415
1080+
from datamodel_code_generator.types import DataTypeManager, StrictTypes # noqa: PLC0415
1081+
1082+
try:
1083+
from datamodel_code_generator.model.pydantic_v2 import UnionMode # noqa: PLC0415
1084+
except ImportError: # pragma: no cover
1085+
from typing import Any # noqa: PLC0415
1086+
1087+
runtime_union_mode = Any
1088+
else:
1089+
runtime_union_mode = UnionMode
1090+
1091+
types_namespace = {
1092+
"Path": Path,
1093+
"DataModel": DataModel,
1094+
"DataModelFieldBase": DataModelFieldBase,
1095+
"DataTypeManager": DataTypeManager,
1096+
"StrictTypes": StrictTypes,
1097+
"UnionMode": runtime_union_mode,
1098+
}
1099+
obj.model_rebuild(_types_namespace=types_namespace)
1100+
else:
1101+
obj.model_rebuild()
1102+
1103+
10731104
def _load_model_schema( # noqa: PLR0912, PLR0914, PLR0915
10741105
input_model: str,
10751106
input_file_type: InputFileType,
@@ -1151,6 +1182,8 @@ def _load_model_schema( # noqa: PLR0912, PLR0914, PLR0915
11511182
if not hasattr(obj, "model_json_schema"):
11521183
msg = "--input-model with Pydantic model requires Pydantic v2 runtime. Please upgrade Pydantic to v2."
11531184
raise Error(msg)
1185+
if hasattr(obj, "model_rebuild"): # pragma: no branch
1186+
_try_rebuild_model(obj)
11541187
schema_generator = _get_input_model_json_schema_class()
11551188
schema = obj.model_json_schema(schema_generator=schema_generator)
11561189
schema = _add_python_type_for_unserializable(schema, obj)

tests/test_input_model.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -962,3 +962,14 @@ def test_input_model_ref_strategy_typeddict_reuse_foreign(tmp_path: Path) -> Non
962962
"class Profile",
963963
],
964964
)
965+
966+
967+
@SKIP_PYDANTIC_V1
968+
def test_input_model_config_class(tmp_path: Path) -> None:
969+
"""Test that config classes like GenerateConfig are properly handled."""
970+
run_input_model_and_assert(
971+
input_model="datamodel_code_generator.config:GenerateConfig",
972+
output_path=tmp_path / "output.py",
973+
extra_args=["--output-model-type", "typing.TypedDict"],
974+
expected_output_contains=["TypedDict", "Callable[[str], str]"],
975+
)

0 commit comments

Comments
 (0)