Feature: Provide extra context to mapping
Sometimes you need additional infos for the target object, that you don’t have stored in the source class. With provide_with_extra you can mark fields, so that no mapping is generated, and the field is filled using an extra dictionary that can be given to the map_to function.
python
class TargetItem(BaseModel):
x: int
mapper(TargetItem, {"x": provide_with_extra()})
class SourceItem(BaseModel):
pass
class TargetCollection(BaseModel):
x: int
item: TargetItem
optional_item: Optional[TargetItem]
items: list[TargetItem]
mapper(TargetCollection, {"x": provide_with_extra()})
class SourceCollection(BaseModel):
item: SourceItem
optional_item: Optional[SourceItem]
items: list[SourceItem]
source_collection = SourceCollection(
item=SourceItem(), optional_item=SourceItem(), items=[SourceItem(), SourceItem()]
)
map_to(
source_collection,
TargetCollection,
extra={"x": 1, "item": {"x": 2}, "optional_item": {"x": 3}, "items": [{"x": 4}, {"x": 5}]}
) == TargetCollection(
x=1, item=TargetItem(x=2), optional_item=TargetItem(x=3), items=[TargetItem(x=4), TargetItem(x=5)]
)