清理Plone的CMFEditions历史对象中的注释

时间:2012-05-02 12:06:39

标签: plone versioning

我正在尝试清理已卸载的Plone插件的内容注释(IAnnotations)。我成功地浏览了所有网站内容并删除了实时对象中的注释。

但是,CMFEditions /版本控制会保留旧的内容副本,我不知道如何浏览它们并删除它们上的所有错误注释。

除非我可以清理这些对象引用,否则在从buildout中删除加载项之后,在编辑具有历史记录中缺少对象的注释的内容时,会开始获取ZODB BrokenObject错误。

1 个答案:

答案 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