2012-05-02 3 views
3

Я пытаюсь очистить аннотации содержания (IAnnotes) от удаленной надстройки Plone. Я успешно прошел весь контент сайта и удалил аннотации в живые объекты.Очистка аннотаций в объектах истории CMFEditions Plone

Однако CMFEditions/versioning хранит старые копии содержимого, и я не знаю, как пройти через них и удалить все плохие аннотации, которые у них есть.

Если я не могу очистить эти ссылки на объекты, после удаления надстройки из buildout начинает появляться ошибки ZODB BrokenObject при редактировании содержимого, содержащего аннотации с отсутствующими объектами в истории.

ответ

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 
Смежные вопросы