23 lines
No EOL
979 B
Python
23 lines
No EOL
979 B
Python
from pydantic import BaseModel, Field, model_validator
|
|
from typing import Optional, Any
|
|
|
|
class BaseLinkedModel(BaseModel):
|
|
model_config = dict(arbitrary_types_allowed=True)
|
|
|
|
@model_validator(mode="before")
|
|
@classmethod
|
|
def auto_populate_ids(cls, data: dict[str, Any]) -> dict[str, Any]:
|
|
if isinstance(data, dict):
|
|
for key, value in data.copy().items():
|
|
if not key.endswith("_id") and hasattr(value, "id") and value is not None:
|
|
id_key = key + "_id"
|
|
|
|
if id_key in data:
|
|
# If the id_key already exists, ensure it matches the value's id
|
|
if data[id_key] != value.id:
|
|
raise ValueError(f"ID mismatch for {key}: {data[id_key]} != {value.id}")
|
|
else:
|
|
# If the id_key does not exist, set it to the value's id
|
|
data[id_key] = value.id
|
|
|
|
return data |