改进ZODB对损坏接口和组件的处理
项目描述
警告!此包高度实验性,不应由ZCA和ZODB内部工作原理的专家以外的任何人使用,并且永远不应在生产环境中使用。
ZODB对损坏对象的处理可能会使使用zope.interface的扩展应用程序变得过于脆弱。如果将扩展的标记接口用于ZODB中的对象,则删除该扩展会导致对该对象的任何zope.interface操作失败。更糟糕的是,如果扩展在ZODB中的注册表中注册了任何组件,则该注册表将无法用于任何ZCA操作。
由于接口和ZCA通常是使用ZODB的应用程序的核心部分,因此可能有必要为这些服务添加对损坏对象的特殊处理。此包中包含的补丁试图做到这一点。
对于ZODB中的直接提供标记接口的对象,这些补丁允许对象在接口不可用时表现得像没有应用标记接口一样。如果接口再次可用,该接口的完整行为将得到恢复。同样,如果一个组件的类、提供接口或必需接口缺失,这些补丁允许注册表执行它本来可以在缺少损坏组件注册的情况下完成的查找。如果组件类、提供接口和必需接口得到恢复,则组件注册将得到完全恢复。如果在ZODB中提交的对象或注册表中包含损坏的接口或组件,提交将成功,如果恢复缺失的类和接口,则仍然可以完全恢复先前的行为。
唯一例外是当在持久注册表中注册的非持久组件的类被移除时,注册表无法成功提交回ZODB。换句话说,如果你的持久注册表包含对不包含持久.Persistent基类的组件的注册,那么你将能够使用注册表,但你将无法在不首先删除损坏的组件注册的情况下对注册表进行任何更改。
此包的目的是检查损坏对象处理实现的正确性和健壮性,以便将其合并到zope.interface和zope.component本身。换句话说,当此代码被发现足够健壮以更广泛地使用时,此包将不再是它的家。因此,除非你是高级Zope开发者,否则不要使用这些补丁。
如果您想试用此包,请仅在ZODB的副本上工作,永远不要在实时数据上工作,只需将此包添加到实例的eggs中。它使用z3c.autoinclude在Plone实例下自动应用补丁。
更改日志
0.7 - 2019-02-15
修复损坏的发布上传。[rpatterson]
0.6 - 2019-02-15
Plone:从已删除的代码中清理端口类型。[rpatterson]
容忍空的ZODB.broken类缓存。[rossp]
修复损坏的类检查,容忍与Zope2应用程序中相同的情况下的ExtensionClass。[rossp]
0.5 - 2011-11-07
更新ZCML以包含较新的补丁。[rossp]
0.4 - 2011-11-07
修复ZODB.broken.Broken的序列化,以便非持久组件注册不会干扰对持久注册表的更改提交。[rossp]
0.3 - 2011-11-07
以这种方式序列化损坏的接口,以便在不安装此包的情况下可以反序列化。[rossp]
修复组件注册,以便可以使用它们注销损坏的注册。[rossp]
0.2 - 2011-11-06
添加configure.zcml和z3c.autoinclude支持,以在Plone下应用补丁。[rossp]
0.1 - 2011-11-06
初始发布。[rossp]
项目详情
experimental.broken-0.7.tar.gz的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 7ba5ac9298f73667a7cf58f4f18bb5091882e672b1f014c496f0808c2a56de70 |
|
MD5 | e1d13e49671ae93ec03429cba2fc2556 |
|
BLAKE2b-256 | 114496afb439d03bb606a41b9a9d2cdc98dd1ad26aaeb819acd2f07fa376cfa0 |