NTI Externalization
项目描述
nti.externalization
一个灵活的、基于模式的系统,用于将Python对象转换为外部格式(如JSON和YAML),并反向转换。在Pyramid等zope.component环境中表现良好。
更改
2.3.0 (2021-08-02)
2.2.0 (2021-04-14)
添加对 Python 3.9 的支持。
依赖于 BTrees 4.8 及以上版本。这简化了外部化检查。请参阅 问题 111。
2.1.0 (2020-08-03)
添加对“外部化策略”的支持。这些是 ExternalizationPolicy 的实例,可以用来调整外部化的某些底层细节,而无需完全替换外部化对象。它们旨在具有非常低的性能影响。
目前唯一可以更改的细节是,标准创建和最后修改字段是否以 Unix 时间戳(默认)或 ISO 8601 字符串的形式外部化。
请参阅 https://github.com/NextThought/nti.externalization/issues/109
2.0.0 (2020-07-02)
更改 ILocatedExternalMapping:之前它扩展了遗留的 zope.interface.common.mapping.IFullMapping。现在它扩展了现代的 zope.interface.common.collections.IMapping。请注意,这与较旧的接口不同,这不需要可变性。(该软件包提供的 LocatedExternalDict 类是完全可变的,并实现了 IMutableMapping。它还继续实现 IFullMapping,但建议不要使用该接口。)
更改 ILocatedExternalSequence:之前它扩展了遗留的 zope.interface.common.sequence.ISequence。现在它扩展了现代的 zope.interface.common.collections.ISequence。请注意,这与较旧的接口不同,这不需要可变性。(该软件包提供的 LocatedExternalList 类是完全可变的,并实现了 IMutableSequence。)
修复 LocatedExternalList 的接口解析顺序。之前,使用 zope.interface 5 时,它开始实现 IMutableSequence(来自 zope.interface.common.collections 的新接口)以及较旧的接口 ISequence(来自 zope.interface.common.sequence);这两个接口的解析顺序不一致。现在,它只实现 IMutableSequence 和不冲突的遗留接口的子集。请参阅 问题 105。
1.1.3 (2020-06-25)
在更新对象之前正确触发 IObjectWillUpdateFromExternalEvent 事件。
1.1.2 (2020-04-07)
适应 zope.container 4.4.0 中的更改,该更改暴露了不安全的假设,即 providedBy(obj) 将在后续调用中返回具有完全相同状态的确切相同对象。这在并发情况下始终是一个错误(例如,如果不同的线程在同一对象上调用 directlyProvides 或调整 IRO 中某些接口的 __bases__);zope.container 的更改使它可能在没有并发的情况下实现。请参阅 https://github.com/zopefoundation/zope.container/issues/38 和 https://github.com/NextThought/nti.externalization/issues/104。
1.1.1 (2020-03-27)
修复一个错误的断言错误。请参阅 问题 102。
1.1.0 (2020-03-27)
将fractions.Fraction实例外部化为字符串,例如"1/3"。当由可以解析此格式的模式字段接收时,例如zope.schema.Rational(或在数值塔上更高),这意味着分数可以来回转换。
支持将decimal.Decimal对象外部化为YAML表示。
1.0.0 (2020-03-19)
添加与zope.interface 5.0的兼容性,并要求使用。
记录哪些标记值被继承,哪些没有被继承。
停止继承_ext_is_marker_interface。
1.0.0a14(2019-11-13)
使用'3str'作为语言级别,用Cython 0.29.14进行构建。
添加对Python 3.8的支持。
将PyYAML更新到5.1,并略微改变默认输出样式。
修复与Persistent 4.4.3及更高版本兼容的测试。
支持zope.interface 4.7,当在具有多个对象实现派生接口的模块上使用<registerAutoPackageIO>时,允许接口上的标记值继承。请参阅问题97。
1.0.0a13(2018-09-20)
支持zope.schema 4.8.0引入的IFromBytes字段。请参阅问题92。
对于非字节和非文本数据,validate_field_value(以及由此扩展的InterfaceObjectIO.update_from_external_object)将调用任何字段定义的fromObject。以前,只有当字段引发WrongContainedTypeError时,才会调用fromObject。
1.0.0a12(2018-09-11)
添加对zope.schema 4.7.0和nti.schema 1.5.0的支持。删除对旧版本的支持,包括删除对dm.zope.schema.Object字段的支撑。
1.0.0a11(2018-08-29)
@WithRepr装饰器考虑了Persistent 4.4更新的默认repr,并且不隐藏它。
具有非-str(Python 2上的unicode,Python 3上的bytes)键的ExternalizableInstanceDict子类在外部化时不会抛出TypeError。相反,非-str值将转换为str(使用ASCII编码),如果有的话,将设置_p_changed属性。
1.0.0a10(2018-08-21)
大多数函数的registry参数已弃用并忽略。现在,我们直接调用接口,而不是调用registry.queryAdapter。例如,IInternalObjectExternalizer(containedObject)。这允许个别对象在没有通过旧代码路径的情况下提供接口时发表意见(如果需要,它也会在对象上调用__conform__)。
1.0.0a9(2018-08-20)
允许InterfaceObjectIO的子类为_ext_primitive_out_ivars_具有非frozenset值。这会发出警告,并在将来引发TypeError。
1.0.0a8(2018-08-16)
更好地支持在Dict值中发现的匿名值对象。现在,如果require_updater为True,它们不会引发ComponentLookupError,并且将根据模式(如果它们没有的话)给出一个MimeType。
1.0.0a7(2018-07-31)
当外部对象具有unicode键时,避免从validate_named_field_value引发TypeError。
LocatedExternalDict对象接受更多的构造函数参数,并允许任意属性。
1.0.0a6(2018-07-31)
InterfaceObjectIO仅在其想要对象时返回IDict字段的匿名工厂。
StandardExternalFields和StandardInternalFields是nti.externalization.externalization中的弃用别名。
update_from_external_object 正确处理了 INamedExternalizedObjectFactoryFinder 和 IInternalObjectUpdater 以不同特定级别注册的情况,并且查找器还实现了 IInternalObjectUpdater。在此之前,查找器可能会被错误地用作更新器。
1.0.0a5 (2018-07-30)
从 InterfaceObjectIO 继承的对象,并在组件注册(在 ZCML 中)中注册为 IInternalObjectIO 的对象仍然可以找到并用作 INamedExternalizedObjectFactoryFinder,这是通过 IInternalObjectIOFinder 在 InterfaceObjectIO 中实现的接口。将发出警告以更新注册(这通常意味着在 ZCML 中删除 provides 行)。
ExternalizableInstanceDict 不再继承自 AbstractDynamicIO,它只实现了相同的接口(除了许多 _ext 方法)。此类已被弃用。
正式记录 nti.externalization.internalization 的 notify_modified 成员。《notifyModified》是一个已弃用的别名。
1.0.0a4 (2018-07-30)
1.0.0a3 (2018-07-28)
@NoPickle 装饰器也适用于 Persistent 子类(并且可能与 Persistent 的多继承子类一起工作,这取决于 MRO,但这是常规对象始终的情况)。带有 @NoPickle 装饰器的 Persistent 子类没有太大意义,因此会发出 RuntimeWarning。如果类直接实现了 pickle 协议方法之一,也会发出警告。
使用 createFieldProperties 或在其类型中具有 FieldProperty 对象的对象更新至少快 10%,这是由于在 FieldProperty 上进行的小型 monkey-patch 而避免了双重验证。请参阅 问题 67。
允许再次使用实现 toExternalObject 的对象的代理;将被代理对象的 toExternalObject 调用。
已紧化 updateFromExternalObject() 的签名。它应该是 (self, external_object, context, **kwargs),其中 **kwargs 是可选的,就像上下文一样。**kwargs 目前不包含任何有用的内容。签名中使用的 dataserver=None 将生成警告。将来可能会进一步紧化。请参阅 问题 30。
__ext_ignore_updateFromExternalObject__ 已正式弃用并生成警告。
update_from_external_object 缓存有关更新器对象类型的某些信息,使其快 8-25%。
update_from_external_object 在字典中就地修改包含的序列,而不是用新列表覆盖。
update_from_external_object 方法在顶层修改序列而不是返回一个新的列表。
添加了对查找未指定 MIME 类型或类字段的入站数据工厂的支持,这些数据基于它们分配的键。这有助于消费由外国系统生成或使用需要模型值的 Dict 方案字段的数据。请参阅 问题 51 和 PR 68。
使用 InterfaceObjectIO(包括通过 ZCML 指令 registerAutoPackageIO)的方案可以在内部化(外部化一直有效)上更容易地使用 Dict 字段:它们自动将 Dict 作为匿名外部数据内部化。
字符串可以自动转换为 ITimeDelta 对象。
1.0.0a2(2018-07-05)
外部化的低级别不再捕获并隐藏 POSKeyError。这表明数据库存在问题。请参阅 https://github.com/NextThought/nti.externalization/issues/60
从 update_from_external_object 中移除了对 object_hook 的支持。请参阅 https://github.com/NextThought/nti.externalization/issues/29。
移除了一些已移除函数的过时别名的支持。
在 CPython 上,一些模块使用 Cython 编译为扩展模块,以实现 10-30% 的速度提升。通过设置 PURE_PYTHON 环境变量,在运行时禁用此功能。
已从 ExternalizableDictionaryMixin 的实例中移除了未使用、未记录的方法 stripSyntheticKeysFromExternalDictionary。使用导入代替。
现在对于 to_standard_external_dictionary 和 to_minimal_standard_external_dictionary 的未使用关键字参数会产生警告。将来,额外的关键字参数将是一个错误。
notifyModified 不再接受 eventFactory 参数。
已移除 notifyModified 的别名 notifyModified。
外部映射和外部对象的装饰处理 decorate_callback 的参数不同。此参数仅在 decorate 为假时使用。此参数也很容易混淆,应考虑将其弃用。
choose_field 不再具有对 CREATOR 外部字段名的未记录转换行为。
1.0.0a1(2017-09-29)
首次 PyPI 发布。
添加了对 Python 3 的支持。
取消对外部化到 plists 的支持。请参阅 https://github.com/NextThought/nti.externalization/issues/21
达到 100% 的测试覆盖率,并确保通过 CI 保持这一点。
引入 nti.externalization.extension_points 来保存钩子函数。将 Pyramid 集成移到那里(并弃用该集成)。还将 NTIID 支持移到那里(但旧名称也有效)。请参阅 https://github.com/NextThought/nti.externalization/issues/27
弃用 nti.externalization.internalization.register_legacy_search_module。请参阅 https://github.com/NextThought/nti.externalization/issues/35
默认情况下阻止 ext:registerAutoPackageIO 注册基于旧类名的工厂。如果您需要基于类名的工厂,有两个选择。第一个是将 IClassObjectFactory 对象显式注册到 ZCML 中(我们可以添加一个扫描指令以方便处理大量类),第二个是在 ext:registerAutoPackageIO 的 ZCML 指令中将 register_legacy_search_module 设置为 true 值。请注意,我们预计这个属性的 behavior 将在不久的将来发生变化。请参阅 https://github.com/NextThought/nti.externalization/issues/33
使 ext:registerAutoPackageIO 在配置上下文执行时进行旧类注册,而不是在指令运行时进行。这意味着在配置时将检测到旧类名冲突。这也意味着可以使用 z3c.baseregistry 在本地注册旧类名(以前它们总是注册在全局站点管理器中)。请参阅 https://github.com/NextThought/nti.externalization/issues/28
取消对 zope.preference 和 zope.annotation 的依赖。虽然我们的 configure.zcml 中包括了它们,但此包并未使用。如果您使用 zope.preference 或 zope.annotation,请在您的 ZCML 文件中包括它们。
取消对 Acquisition 的严格依赖。如果可用,它仍然会被使用,并且在测试模式下会被使用。
在 nti.externalization.factory 中添加 IMimeObjectFactory 和 IClassObjectFactory 的公共实现。
取消对 nti.zodb 及其 PersistentPropertyHolder 的依赖。在 nti.externalization.persistence 中的数据结构不再扩展该类;如果您有进一步子类添加了 nti.zodb.peristentproperty.PropertyHoldingPersistent 属性,您现在需要确保混入这个类。请参阅 https://github.com/NextThought/nti.externalization/issues/43
添加用于注册基于类名的工厂的 <ext:classObjectFactory> 指令。(注意:MIME 工厂是首选。)
现在,调用 to_standard_external_dictionary(包括 AutoPackageScopedInterfaceIO)的调用者将自动获得一个 MimeType 值(如果找到的话)。以前只有调用 to_minimal_standard_external_dictionary 的调用者会得到。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源代码分发
构建分发
nti.externalization-2.3.0.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a850c171af1da25713c0bbcff73e4af49412c6b940e43ae59b4afdf8b751d05d |
|
MD5 | 2d6046f5540b09b9a5c7fd3e71907b7a |
|
BLAKE2b-256 | 4227f3f8531aa82e1df6e8741fe901e9836be6a2f8d5e8bd93104c880b6baa63 |
nti.externalization-2.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 553065b8805832231c616c20fed1c66c5f11b2d92ff747c1db5b88f004145b72 |
|
MD5 | 02fdcb5f4685511739594b78901d42da |
|
BLAKE2b-256 | b6c287fcf03e5688eaa78ab80396511282dedd011d84fbc20683a29fce6b2f02 |
nti.externalization-2.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 77435c58d6994413d46f6decccfe800df15d5f8e1dd0f2e3bd88212d211df085 |
|
MD5 | 1513883d985a1dcc98857bef1f424911 |
|
BLAKE2b-256 | 82924cfae97f85890d1c2c904dc49c2375601e50a981b65ffe99faa2f8f2f54a |
nti.externalization-2.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 4a00873d54fa67408b68bc14c5e9fa59df1fc634f6d6cefe3e0557f8a9455c0f |
|
MD5 | 666baf35da238b65e8498147a0954737 |
|
BLAKE2b-256 | 33780f1862c4ab10161afd9b64797d1edfc7541a141a459c6f71b6261cdf06a3 |
哈希值 用于 nti.externalization-2.3.0-cp38-cp38-macosx_10_15_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 450421a8ccee480cb3cb837d8ccdd3518638e6b7c6d61d67c15db39627c7d294 |
|
MD5 | d46a200d21e8558dd99d1fe460a3e1b2 |
|
BLAKE2b-256 | 948aaefe972b43b82ec2a03389c8b795b04a091c70bb9701641305f5e4f37235 |