我正在尝试清理已卸载的 Plone 附加组件的内容注释 (IAnnotations)。我已经成功浏览了所有站点内容并删除了活动对象中的注释。
但是,CMFEditions / 版本控制保留了旧的内容副本,我不知道如何遍历它们并删除它们上面的所有错误注释。
除非我可以清理这些对象引用,否则在从构建中删除附加组件后,在编辑具有历史记录中缺少对象的注释的内容时,会开始出现 ZODB BrokenObject 错误。
我正在尝试清理已卸载的 Plone 附加组件的内容注释 (IAnnotations)。我已经成功浏览了所有站点内容并删除了活动对象中的注释。
但是,CMFEditions / 版本控制保留了旧的内容副本,我不知道如何遍历它们并删除它们上面的所有错误注释。
除非我可以清理这些对象引用,否则在从构建中删除附加组件后,在编辑具有历史记录中缺少对象的注释的内容时,会开始出现 ZODB BrokenObject 错误。
那很讨厌。插件应该只使用原始类型进行所有数据存储的另一个原因。
我有一些伪代码可能会让你接近:
repo_tool = getToolByName(obj, "portal_repository")
if not repo_tool.isVersionable(obj):
return
history = repo_tool.getHistoryMetadata(obj)
if not history:
return
length = history.getLength(countPurged=False)
for i in xrange(length - 1, -1, -1):
try:
version = repo_tool.retrieve(obj, i)
annotations = IAnnotations(version.object)
del annotations[KEY_TO_DELETE]
except POSKeyError:
pass