有没有可能运行一个变形器部分在所有其他完全运行之后?
It is possible to run a transmogrifier section after all other have completely run?
我正在使用 transmogrifier 管道将内容导入 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()
这是个好主意吗?
是的,做一个后处理部分是个好主意,唯一的问题是 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()
我正在使用 transmogrifier 管道将内容导入 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()
这是个好主意吗?
是的,做一个后处理部分是个好主意,唯一的问题是 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()