将数据类转换为棉花糖模式的python库。

marshmallow-dataclass的Python项目详细描述


棉花糖数据类

Build StatusPyPI version

从数据类自动生成marshmallow架构。

指定数据应符合的架构对于(反)序列化和文档都非常有用。 然而,在python中使用模式通常意味着既有一个类来表示数据,又有一个类来表示其模式,这意味着重复的代码可能会失去同步。使用Python3.6的新特性,可以为类成员定义类型,这允许类似这样的库自动生成模式。

一个用例是以一种允许您静态检查代码是否与文档匹配的方式记录api(例如,使用flasgger)。

如何使用

您只需导入 ^{} 而不是 ^{}。 它向生成的类添加一个Schema属性, 含有棉花糖 Schema 上课。

如果需要在棉花糖字段上指定自定义属性 (例如attributeerrorvalidaterequireddump_onlyerror_messagesdescription…) 您可以使用 ^{} 功能。

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属性时, 它可以混淆类型检查。 如果你想避免,你也可以使用标准 dataclassdecorator,并手动生成架构 使用 ^{}

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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
编译器构造为什么在Java中允许初始化对Null的引用?   java手动调用javax的actionPerformed。摆动计时器   使用git分支的java Maven版本控制   Java8句子流   java JPA OneToOne和OneToMany实体实例化/创建   java如何将值添加到列表<Map<String,Object>>?   java如何使用ComboBox在一个框架内更改JPanel。getSelectedIndex()   java在比较XML和xmlunit时忽略文本差异   java无法从其他pc连接到本地主机   Java中分配对象id的优雅方式   Java中静态变量的使用   java试图从Neteller获取OAuth访问令牌时产生错误:“服务器返回HTTP响应代码:401表示URL”   Java:基元类型是否会影响性能?   java可以让hasNext()不区分大小写吗?   基于AutoCompleteTextView建议属性或AutoCompleteTextView值的java Android搜索   java流文件到firefox浏览器有时无法打开应用程序对话框   在没有ArrayList的Java中返回数组中的搜索结果   复制java。木卫一。IOException:数据错误(CRC)   java为什么我在尝试删除Facebook测试用户时会出现“方法未实现”错误   java如何使用JNA调用SetProcessReliationPolicy