Primitize是一个库,它有助于将数据类实例转换为基本对象。
primitize的Python项目详细描述
原始化
Primitize是一个帮助将数据类实例转换为基元对象的库。它提供了一些工具来处理数据、验证数据并将其以几乎任何你想要的格式写入文件。在
接口
fromdataclassesimportdataclassfromprimitize.coreimportPrimitizable,primitize,primitized@dataclassclassObj(Primitizable):a:intb:bool=primitized(modifier=lambdaself,b:str(b).lower())defprimitize(self):returnjson.dump(super().primitize(self))primitize(Obj(1,True))=='{"a": 1, "b": "true"}'
Primitize将把任何数据类转换为基元类型。当对任何d
数据类调用primitize(d)
时,它将执行d.primitize()
方法(如果已定义),否则将使用默认实现。
默认实现将循环访问dataclass中定义的每个字段。每个字段在两个步骤中序列化:
- 首先调用
modifier(object, field_value)
。在 - 然后将此返回传递到
validator(object, return_of_the_modifier)
。在
示例用法
正在生成配置文件
假设我们要为几个集群生成配置文件,我们有很好的默认值,但是没有任何东西总是完全相同的。在本例中,我们希望每个集群配置都写入一个json文件。在
^{pr2}$执行此操作后,您将在./output/
下找到以下文件:
./output/A.json
:
{
"name": "A",
"size": 3,
"host_type": "Compute",
"admins": [
"root"
]
}
./output/B.json
:
{
"name": "A",
"size": 3,
"host_type": "Web",
"admins": [
"root"
]
}
./output/C.json
:
{
"name": "C",
"size": 3,
"host_type": "Storage",
"admins": [
"foo"
]
}
这和X有何不同?在
Primitize | Protobuf/Thrift | TypedDict | Jinja | |
---|---|---|---|---|
Modifiers | Yes | No | No | No |
Validators | Type & Custom | Type | Type | No |
Language support | Python only | Multiple | Python | Custom DSL |
Full Python API | Yes | No | Yes | No |
Format flexibility | Yes | No | No | Yes |
- 修饰符:Primitize允许您定义在序列化之前对值进行按摩的函数,这允许您重命名或重新格式化数据以使序列化更容易。这方面的一个典型用例是拥有一个易于操作的类型值,并使用修饰符将其重写为所需的最终格式
- 验证器:Primitize使用标准的Python类型,所以mypy将确保您进行类型检查。在Primitize中,您还可以定义函数,使您能够确保值在序列化时是正确的。在
- 语言支持:Primitize是一个python库,因此它主要用于python。在
- 完整的Python API:与限制性DSL不同,Primitize实际上只是您的Python程序在运行,所以您可以做任何您想做的事情,我们只是帮助您将数据类转换为基元类型,以便更容易地编写。在
- 格式灵活性:Primitize不会为您写出数据,所以您可以将其写成任何您想要的内容。你想要json吗?
json.dumps(primitize(data))
你想要山药吗?yaml.dumps(primitize(data))
。就这么简单。在
- 项目
标签: