Можно ли запустить секцию трансмогрификатора после того, как все остальные полностью запустятся?

Я импортирую контент в Plone, используя конвейер трансмогрификатора, и, чтобы исправить различные аспекты, такие как изображения, ссылки и связанный контент, мне нужно запустить мой раздел сразу после того, как весь контент был создан и проиндексирован.

Мне это нужно, потому что я хочу использовать инструмент каталога для поиска контента по пути и использования его UUID для ссылки на него.

Возможно ли это с помощью Transmogrifier или лучше сделать это с помощью любой другой технологии, например, простого шага обновления?

Я думал об использовании шаблона, похожего на исходный раздел:

from collective.transmogrifier.interfaces import ISection
from collective.transmogrifier.interfaces import ISectionBlueprint

class DoSomethingAtTheVeryEndSection(object):

    classProvides(ISectionBlueprint)
    implements(ISection)

    def __init__(self, transmogrifier, name, options, previous):
        self.previous = previous

    def __iter__(self):
        for item in self.previous:
            yield item

        for item in self.previous:
            do_something()

Это хорошая идея?

1 ответ

Решение

Да, это хорошая идея сделать раздел PostProcess, единственная проблема в том, что self.previous генератор не может быть вызван 2 раза таким образом.

Обходной путь - использовать itertools.tee для дублирования генератора, так что вы можете дважды войти в генератор:

from collective.transmogrifier.interfaces import ISection
from collective.transmogrifier.interfaces import ISectionBlueprint

import itertools


class DoSomethingAtTheVeryEndSection(object):

    classProvides(ISectionBlueprint)
    implements(ISection)

    def __init__(self, transmogrifier, name, options, previous):
        self.previous = previous

    def __iter__(self):
        self.previous, self.postprocess = itertools.tee(self.previous)
        for item in self.previous:
            yield item

        for item in self.postprocess:
            do_something()
Другие вопросы по тегам