我正在尝试清理已卸载的Plone插件的内容注释(IAnnotations)。我成功地浏览了所有网站内容并删除了实时对象中的注释。
但是,CMFEditions /版本控制会保留旧的内容副本,我不知道如何浏览它们并删除它们上的所有错误注释。
除非我可以清理这些对象引用,否则在从buildout中删除加载项之后,在编辑具有历史记录中缺少对象的注释的内容时,会开始获取ZODB BrokenObject错误。
答案 0 :(得分:5)
那太讨厌了。插件的另一个原因应该只是使用原始类型来存储所有数据。
我有一些伪代码可能会让你接近:
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