将数据类转换为棉花糖模式的python库。
marshmallow-dataclass的Python项目详细描述
棉花糖数据类
从数据类自动生成marshmallow架构。
指定数据应符合的架构对于(反)序列化和文档都非常有用。 然而,在python中使用模式通常意味着既有一个类来表示数据,又有一个类来表示其模式,这意味着重复的代码可能会失去同步。使用Python3.6的新特性,可以为类成员定义类型,这允许类似这样的库自动生成模式。
一个用例是以一种允许您静态检查代码是否与文档匹配的方式记录api(例如,使用flasgger)。
如何使用
您只需导入
^{Schema
属性,
含有棉花糖
Schema
上课。
如果需要在棉花糖字段上指定自定义属性
(例如attribute
,error
,validate
,required
,dump_only
,error_messages
,description
…)
您可以使用
^{
fromdataclassesimportfieldfrommarshmallow_dataclassimportdataclass# Importing from marshmallow_dataclass instead of dataclassesimportmarshmallow.validatefromtypingimportList,Optional@dataclassclassBuilding:# The field metadata is used to instantiate the marshmallow fieldheight:float=field(metadata={'validate':marshmallow.validate.Range(min=0)})name:str=field(default="anonymous")@dataclassclassCity:name:Optional[str]buildings:List[Building]=field(default_factory=lambda:[])# City.Schema contains a marshmallow schema classcity,_=City.Schema().load({"name":"Paris","buildings":[{"name":"Eiffel Tower","height":324}]})# Serializing city as a json stringcity_json,_=City.Schema().dumps(city)
前面的语法非常方便,因为
你必须应用到你现有的代码更新
dataclass
导入。
但是,当动态添加.Schema
属性时,
它可以混淆类型检查。
如果你想避免,你也可以使用标准
dataclass
decorator,并手动生成架构
使用
^{
fromdataclassesimportdataclassfromdatetimeimportdatetimeimportmarshmallow_dataclass@dataclassclassPerson:name:strbirth:datetimePersonSchema=marshmallow_dataclass.class_schema(Person)
您还可以将架构声明为
^{
frommarshmallow_dataclassimportdataclassfrommarshmallowimportSchemafromtypingimportClassVar,Type@dataclassclassPoint:x:floaty:floatSchema:ClassVar[Type[Schema]]=Schema
您可以指定
^{
frommarshmallow_dataclassimportdataclass@dataclassclassPoint:x:floaty:floatclassMeta:ordered=True
安装
这个包裹is hosted on pypi:
pipenv install marshmallow-dataclass
文档
项目文档位于github页面:
使用警告
这个库依赖于python的标准 typing 图书馆,就是 provisional。