Files
mealie/mealie/schema/mapper.py
2025-06-24 09:46:49 +02:00

22 lines
658 B
Python

from pydantic import BaseModel
def mapper[U: BaseModel, T: BaseModel](source: U, dest: T, **_) -> T:
"""
Map a source model to a destination model. Only top-level fields are mapped.
"""
for field in source.__class__.model_fields:
if field in dest.__class__.model_fields:
setattr(dest, field, getattr(source, field))
return dest
def cast[U: BaseModel, T: BaseModel](source: U, dest: type[T], **kwargs) -> T:
create_data = {
field: getattr(source, field) for field in source.__class__.model_fields if field in dest.model_fields
}
create_data.update(kwargs or {})
return dest(**create_data)