3

アンインストールされたPloneアドオンのコンテンツアノテーション(IAnnotations)をクリーンアップしようとしています。すべてのサイトコンテンツを順調にウォークスルーし、ライブオブジェクトの注釈を削除しました。

ただし、CMFEditions /バージョン管理では古いコンテンツのコピーが保持されており、それらをウォークスルーして、それらにあるすべての不正な注釈を削除する方法がわかりません。

これらのオブジェクト参照をクリーンアップできない限り、ビルドアウトからアドオンを削除した後、履歴にオブジェクトが欠落している注釈を持つコンテンツを編集すると、ZODBBrokenObjectエラーが発生し始めます。

4

1 に答える 1

5

それは厄介です。アドオンがすべてのデータストレージにプリミティブ型のみを使用する必要があるもう1つの理由。

私はあなたを近づけるかもしれないいくつかの擬似コードを持っています:

    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
于 2012-05-02T14:01:11.357 に答える