跳转到主要内容

将Zope架构定义序列化为XML和从XML反序列化

项目描述

简介

plone.supermodel为基于zope.schema字段的schema接口提供XML导入和导出功能。主要用例包括:

1. 根据XML文件在代码中定义schema接口。这可以通过以下语法完成:

>>> from plone.supermodel import xmlSchema
>>> IMySchema = xmlSchema("myschema.xml")

2. 通过XML格式保存和加载接口定义。要将schema接口转换为XML,可以执行以下操作:

>>> from plone.supermodel import serializeSchema
>>> xml_string = serializeSchema(IMySchema)

要从XML文件获取schema,可以使用上面提到的xmlSchema()函数,或者可以使用更强大的spec()函数,该函数将给定XML文件中的所有schema和widget提示转换为字典。

有关更多信息,包括如何为表单提供widget提示以及如何在同一个XML文件中保持多个schema的详细说明,请参阅源代码中的schema.txt和interfaces.py。

Supermodel与Userschema的比较

此包与Tres Seaver的“userschema”库非常相似,该库可在以下网址找到:http://agendaless.com/Members/tseaver/software/userschema

实际上,plone.supermodel最初是基于userschema构建的。然而,随着该包的精炼和重构,userschema的内容越来越少,以至于我们需要对后者进行重大重构才能继续使用它。

XML导入/导出代码目前基于为plone.app.portlets和plone.app.contentrules的GenericSetup处理器编写的算法。

这两个包之间的一些关键区别包括:

  • userschema可以从HTML表单和CSV电子表格创建schema接口。plone.supermodel不支持此类配置。

  • 使用userschema创建的schema通常在启动时加载,使用ZCML指令。plone.supermodel支持类似于上面所示的“伪基类”语法,在Python代码中定义接口。除此之外,其API更侧重于运行时配置。

  • plone.supermodel支持将schema序列化为XML。

  • plone.supermodel的XML语法更直接地与zope.schema字段相关联,并从每个zope.schema字段声明的schema接口推断出大多数参数。这有两个优点:

    • zope.schema的API文档可以轻松应用于<schema />块

    • 支持新的字段和晦涩的属性更加容易

  • plone.supermodel的XML schema旨在支持更多的schema元数据,包括widget提示。

未来,通过更多的重构,可能可以让userschema重用plone.supermodel的一部分,或者反之亦然。

变更日志

2.0.4 (2024-01-22)

内部

  • 更新配置文件。[plone开发者](55bda5c9, 6e36bcc4)

2.0.3 (2023-03-22)

内部

  • 更新配置文件。[plone开发者](13d8d6c0, 243ca9ec)

2.0.2 (2023-02-07)

错误修复

  • 更新包配置。[gforcada](#1)

2.0.1 (2023-01-27)

错误修复

  • 通过github.com/plone/meta统一仓库配置。[gforcada, maurits](#1)

2.0.0 (2022-07-13)

错误修复

  • 将1.6.4版本发布为2.0.0。这是一个主要版本。我已经将1.6.3重新发布为1.6.5。[maurits](#27)

1.6.4 (2021-09-01)

破坏性更改

  • 通过不处理行为schema类,使finalizeSchema更健壮。[maurits](#27)

1.6.3 (2020-11-17)

错误修复

  • 为了提高安全性,在xml解析器中不解析实体,并删除处理指令。[maurits](#3209)

1.6.2 (2020-06-24)

错误修复

  • 十进制字段已移动到zope.schema中,测试中不依赖于特定的点名称,因为它并不重要。[jensens](#37)

  • 修复正则表达式上的弃用警告。[ale-rt](#38)

1.6.1 (2020-04-22)

错误修复

  • 小型包装更新。[#1]

1.6.0 (2020-03-09)

新功能

  • zope.interface master版本,即将发布v5.0,将_v_attrs初始化为None以节省内存,并在首次使用时创建字典。因此,我们需要这样做以支持新版本。(#33)

  • 支持zope.interface 4.7+ [jensens] (#34)

1.5.0 (2019-12-11)

新功能

  • 添加对整数选项的支持,以改进registry.xml导出。[jone] (#32)

1.4.1 (2019-11-25)

错误修复

  • 确保schema.Set序列化一致性的测试。[thet] (#30)

1.4.0 (2018-09-28)

新功能

  • Python 3兼容性。[pbauer, davilima6, dhavlik, ale-rt]

1.3.4 (2017-11-24)

错误修复

  • Python3与sixer兼容。[ale-rt]

1.3.3 (2017-06-04)

错误修复

  • 根据其词汇表固定IChoice的类型转换。#16 [iham]

1.3.2 (2017-02-05)

错误修复

  • 修复supermodel XML选择字段解析器未能解析具有单独键和显示标题的词汇值的问题,因为解析器期望值标签不包含任何命名空间。[datakurre]

1.3.1 (2016-12-30)

错误修复

  • 测试修复:支持最新的zope.i18nmessageid。[jensens]

1.3.0 (2016-06-07)

  • Python 2.6和Plone 4.3不再官方支持。它们可能仍然可以工作,但不会做出特别努力来保持兼容。[maurits]

  • 支持定义字段集的顺序。[jensens]

修复

  • 删除关于Zope 4测试失败的临时修复,因为它已经修复了。[thet]

  • 更新setup.py URL以指向github位置。[esteele]

  • 在初始化完成后取消设置_init_field标志。[metatoaster]

1.2.7 (2016-02-12)

修复

  • 为Zope 4环境中的测试失败添加临时修复。[pbauer]

1.2.6 (2014-10-20)

  • 代码现代化:排序导入,使用装饰器,UTF-8标题。[jensens]

  • 从schema值添加i18n序列化到XML模型[datakurre]

1.2.5 (2014-09-07)

  • 支持具有与值不同的标题的术语的选项字段,同时保留所有标题与值不区分的Choice字段的向后兼容性。[seanupton]

  • 修复解析空Choice术语的问题,将u''而不是None,这解决了https://github.com/plone/plone.app.dexterity/issues/49的原因[seanupton]

  • 为每个Choice字段元素显式构建SimpleTerm实例,而不是依赖于zope.schema构造函数。这确保了所有术语都有非None的标题属性。[seanupton]

  • ChoiceHandler序列化和解析的测试。[seanupton]

1.2.4 (2014-01-27)

  • 添加schema的子元素invariant标签,它接受点命名作为值。不变量必须提供plone.supermodel.interface.IInvariant。[smcmahon]

  • 替换过时的测试断言语句。[timo]

1.2.3 (2013-08-14)

  • 为Dexterity XML添加defaultFactory标签。定义一个接口IDefaultFactory。通过XML指定的defaultFactories必须实现它或IContextAwareDefaultFactory。[smcmahon]

1.2.2 (2013-05-23)

  • 避免在字段值中尝试处理XML注释。[davisagli]

1.2.1 (2013-01-01)

  • 允许在字段定义中包含XML注释。[gweis]

1.2.0 (2012-10-17)

  • 尚未有任何更改。

1.1.2 (2012-08-29)

  • 使用lxml而不是elementtree。[davisagli]

  • 避免对zope.app.testing的测试依赖。[davisagli]

1.1.1 (2012-04-15)

  • 修复打包错误。[esteele]

1.1 (2012-04-15)

  • 支持i18n:domain和i18n:translate进行国际化。[davisagli]

  • 在解析supermodel时遇到错误时,异常现在提供文件名、行号和正在处理的模型部分的源。包含行号和源需要lxml。[davisagli]

  • 添加model.Schema和指令以避免grok依赖。[elro]

1.0.4 - 2012-02-20

1.0.3 - 2011-05-20

1.0.2 - 2011-05-02

  • 仅在处理Unicode值时,将Choice字段values属性转换为词汇表。这修复了与plone.registry的兼容性问题。[davisagli]

1.0.1 - 2011-04-30

  • 调整清单以排除.pyc文件。[davisagli]

1.0 - 2011-04-30

  • 处理序列化带有Unicode值的标记词汇表,只要术语的标记等于UTF-8编码的值。[davisagli]

1.0b8 - 2011-03-18

  • 添加MANIFEST.in。[WouterVH]

  • 字段名称应该是字符串,而不是unicode。[elro]

1.0b7 - 2011-03-03

  • 支持嵌套字典/列表的序列化。[elro]

1.0b6 - 2011-01-04

  • 将zope.app.testing声明为Zope 2.13兼容性的测试依赖。[esteele]

  • 修复了可能导致无法加载Dict和Collection元素的命名空间错误。[davisagli]

1.0b5 - 2010-04-19

  • 添加了对zope.schema.Decimal字段的支持。[optilude]

1.0b4 - 2009-11-17

  • 在写入Choice字段时忽略vocabularyName属性。构造函数仍然在超载功能中使用'vocabulary'键。我们仅支持带有命名词汇的'vocabulary'或带有值列表的'values'。这修复了Zope 2.12 / zope.schema 3.5.4上的测试失败。[optilude]

1.0b3 - 2009-09-28

  • 添加了对将源字段上找到的标记接口同步到syncSchema()的支持。[optilude]

1.0b2 - 2009-07-12

  • 将API方法和参数从mixedCase更改为更一致地符合Zope的其他部分。这是一个不向后兼容的更改。我们深表歉意,但现在或从未有过。:-/

    如果您在代码中发现导入错误或未知关键字参数,请将名称从foo_bar更改为fooBar,例如,load_file()变为loadFile()。[optilude]

  • 如果没有设置名称,则不再将name关键字参数包含在Field构造函数中 [MatthewWilkes]

1.0b1 - 2009-04-17

  • 首次发布

项目详情


下载文件

下载适合您平台文件的文件。如果您不确定要选择哪个,请了解有关安装软件包的更多信息。

源分发

plone.supermodel-2.0.4.tar.gz (46.8 kB 查看散列值)

上传时间

构建分发

plone.supermodel-2.0.4-py3-none-any.whl (45.2 kB 查看散列值)

上传时间 Python 3

由以下支持

AWSAWS云计算和安全赞助商DatadogDatadog监控FastlyFastlyCDNGoogleGoogle下载分析MicrosoftMicrosoftPSF赞助商PingdomPingdom监控SentrySentry错误日志StatusPageStatusPage状态页面