Savepoint section

A savepoint pipeline section commits a savepoint every so often, which has a side-effect of freeing up memory. The savepoint section blueprint name is collective.transmogrifier.sections.savepoint.

A savepoint section takes an optional every option, which defaults to 1000; a savepoint is committed every every items passing through the pipe. A savepoint section doesn't alter the items in any way:

>>> savepoint = """
... [transmogrifier]
... pipeline =
...     source
...     savepoint
...
... [source]
... blueprint = collective.transmogrifier.sections.tests.rangesource
... size = 10
...
... [savepoint]
... blueprint = collective.transmogrifier.sections.savepoint
... every = 3
... """
>>> registerConfig(u'collective.transmogrifier.sections.tests.savepoint',
...                savepoint)

We'll show savepoints being committed by overriding transaction.savepoint:

>>> import transaction
>>> original_savepoint = transaction.savepoint
>>> counter = [0]
>>> def test_savepoint(counter=counter, *args, **kw):
...     counter[0] += 1
>>> transaction.savepoint = test_savepoint
>>> transmogrifier(u'collective.transmogrifier.sections.tests.savepoint')
>>> transaction.savepoint = original_savepoint
>>> counter[0]
3