【发布时间】:2021-01-25 15:57:37
【问题描述】:
我想从一个数据类动态创建一个 Pydantic 模型,类似于从一个数据类动态创建一个棉花糖模式,如在 marshmallow-dataclass 或 https://stevenloria.com/dynamic-schemas-in-marshmallow/ 中。是否已经有一个库或简单的方法可以做到这一点?
一些背景知识——我更喜欢在我的业务逻辑中使用数据类,而不是直接使用 Pydantic 模型。我仅在我的 FastAPI 应用程序中使用 Pydantic 模型对带有驼峰式字段的数据进行序列化/反序列化。但是,我发现自己基本上是在复制效率不高的数据类定义。
示例输入:
from typing import List
from dataclasses import dataclass
@dataclass
class Item:
id: int = None
stuff: str = None
height: float = None
@dataclass
class Bag:
id: int = None
name: str = None
things: List[Item] = None
@dataclass
class Basket:
id: int = None
recipient: str = None
bags: List[Bag] = None
best_item: Item = None
期望的输出:
from typing import List
from pydantic.main import BaseModel
def camel_case_converter(value: str):
parts = value.lower().split('_')
return parts[0] + ''.join(i.title() for i in parts[1:])
class CamelBaseModel(BaseModel):
class Config:
alias_generator = camel_case_converter
class Item(CamelBaseModel):
id: int = None
stuff: str = None
height: float = None
class Bag(CamelBaseModel):
id: int = None
name: str = None
things: List[Item] = None
class Basket(CamelBaseModel):
id: int = None
recipient: str = None
bags: List[Bag] = None
best_item: Item = None
【问题讨论】: