Skip to content

Commit eb4d666

Browse files
author
matmoncon
committed
fix: fix schema missing indexes/constraints if schemas reference each other
1 parent 6c7553d commit eb4d666

File tree

1 file changed

+16
-1
lines changed

1 file changed

+16
-1
lines changed

pyneo4j_ogm/core/base.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353

5454
if IS_PYDANTIC_V2:
5555
from pydantic import SerializationInfo, model_serializer, model_validator
56+
from pydantic.errors import PydanticSchemaGenerationError
5657
from pydantic.json_schema import GenerateJsonSchema
5758
else:
5859
from pydantic.class_validators import root_validator
@@ -160,7 +161,21 @@ class CustomGenerateJsonSchema(GenerateJsonSchema):
160161
"""
161162

162163
def generate(self, *args, **kwargs):
163-
model_cls = cast(Type[BaseModel], args[0]["schema"]["cls"])
164+
model_cls: Optional[Type[BaseModel]] = None
165+
166+
if "definitions" in args[0]:
167+
schema_ref = args[0]["schema"]["schema_ref"]
168+
169+
for definition in args[0]["definitions"]:
170+
if definition["ref"] == schema_ref:
171+
model_cls = cast(Type[BaseModel], definition["schema"]["cls"])
172+
break
173+
else:
174+
model_cls = cast(Type[BaseModel], args[0]["schema"]["cls"]) if "cls" in args[0]["schema"] else None
175+
176+
if model_cls is None:
177+
raise PydanticSchemaGenerationError("Could not find model class in definitions")
178+
164179
generated_schema = super().generate(*args, **kwargs)
165180

166181
for field_name, field in get_model_fields(model_cls).items():

0 commit comments

Comments
 (0)