Я импортирую контент в Plone, используя конвейер трансмогрификатора, но время от времени что-то может пойти не так, и может возникнуть исключение. Когда это происходит, мне нужно снова перезапустить весь процесс, потому что транзакция полностью прервана. Это просто неприемлемо при партии более 100 000 штук.
Я использую collective.transmogrifier.sections. точка сохранения, но устанавливает точку сохранения только с помощью transaction.savepoint(optimistic=True)
.
Я хочу знать, поможет ли мне решить проблему новый раздел с чем-то вроде этого:
from zope.interface import classProvides, implements
from collective.transmogrifier.interfaces import ISectionBlueprint
from collective.transmogrifier.interfaces import ISection
import transaction
class CommitSection(object):
classProvides(ISectionBlueprint)
implements(ISection)
def __init__(self, transmogrifier, name, options, previous):
self.every = int(options.get('every', 1000))
self.previous = previous
def __iter__(self):
count = 0
for item in self.previous:
count = (count + 1) % self.every
if count == 0:
transaction.commit()
yield item