data.py
from dataclasses import dataclass, field
@dataclass
class Maker:
id: str = field(default=None)
name: str = field(default=None)
@dataclass
class Product:
id: str = field(default=None)
name: str = field(default=None)
maker: Maker = field(default=None)
util.py
def set(dest: object, dest_attr: str, src: object, src_field: str):
if "." not in src_field:
dest[dest_attr] = getattr(src, src_field)
return
fields = src_field.split(".")
nested_obj = getattr(src, fields[0])
set(dest, dest_attr, nested_obj, ".".join(fields[1:]))
main.py
from data import Product, Maker
from util import set
maker = Maker(id="m001", name="Maker A")
product = Product(id="p001", name="Product A", maker=maker)
store = {}
set(store, "product_id", product, "id")
set(store, "product_name", product, "name")
set(store, "maker_id", product, "maker.id")
set(store, "maker_name", product, "maker.name")
print(store)
# {'product_id': 'p001', 'product_name': 'Product A', 'maker_id': 'm001', 'maker_name': 'Maker A'}