将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
在同步到继承自基的方案时,即使overwrite为False,也要包括具有与继承字段相同名称的字段。这修复了http://code.google.com/p/dexterity/issues/detail?id=253 [davisagli]
1.0.3 - 2011-05-20
在BSD许可证下重新许可。请参阅http://plone.org/foundation/materials/foundation-resolutions/plone-framework-components-relicensing-policy [davisagli]
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的散列值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 123d7087b400eb5325fbc6b09d3bbd53dc2b6a2d1a26bed343465a0aa667fae1 |
|
MD5 | e612af7da64d2e0a0022b0c8ccd448a6 |
|
BLAKE2b-256 | 4baf297a6bb49ecd98841c3c41ce2cca2c1dbe5d500b50fe4778e103ae02716d |
plone.supermodel-2.0.4-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d0f12f158e052831ace5369039f937a561cff4ed632a41cc51faf6ebca5dda2b |
|
MD5 | 3703ee38350a8b07cda737a8d0164770 |
|
BLAKE2b-256 | 402f4f4265a2f9de7654035624ad0cf177b9cb8c0d4027b912d2263ea45bf81c |