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中定义的每个字段。每个字段在两个步骤中序列化:

  1. 首先调用modifier(object, field_value)。在
  2. 然后将此返回传递到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有何不同?在

PrimitizeProtobuf/ThriftTypedDictJinja
ModifiersYesNoNoNo
ValidatorsType & CustomTypeTypeNo
Language supportPython onlyMultiplePythonCustom DSL
Full Python APIYesNoYesNo
Format flexibilityYesNoNoYes
  • 修饰符:Primitize允许您定义在序列化之前对值进行按摩的函数,这允许您重命名或重新格式化数据以使序列化更容易。这方面的一个典型用例是拥有一个易于操作的类型值,并使用修饰符将其重写为所需的最终格式
  • 验证器:Primitize使用标准的Python类型,所以mypy将确保您进行类型检查。在Primitize中,您还可以定义函数,使您能够确保值在序列化时是正确的。在
  • 语言支持:Primitize是一个python库,因此它主要用于python。在
  • 完整的Python API:与限制性DSL不同,Primitize实际上只是您的Python程序在运行,所以您可以做任何您想做的事情,我们只是帮助您将数据类转换为基元类型,以便更容易地编写。在
  • 格式灵活性:Primitize不会为您写出数据,所以您可以将其写成任何您想要的内容。你想要json吗?json.dumps(primitize(data))你想要山药吗?yaml.dumps(primitize(data))。就这么简单。在

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

推荐PyPI第三方库


热门话题
java DB2查看最近执行的命令   java正则表达式如何只匹配数字后的字符,而不在匹配模式中包含数字   java是否可以使用Jmh运行基于时间的预热阶段?   java必须输入两次输入,扫描仪才能读取   java如何使用一个或多个类方法设置多个类字段,而这些类方法并不专门引用任何字段?   java Quartz的CronTrigger每24小时一次,如午夜   java字符串索引超出边界异常?   java FXMLLoader找不到fxml文件Maven项目   java Eclipse Indigo在安装m2ewtp插件时遇到问题   java如何为连接池配置Hibernate、Spring和ApacheDBCP?   java netbeans:类中的类路径。福奈姆   javajmx及其在Tomcat内部Docker上的调试   java HTTP状态404 tomcat 7   Java:String split():我希望它在末尾包含空字符串   java我应该使用枚举集吗?   Java StringTokenizer如何查找段落结尾?