Manipulator section¶
A manipulator pipeline section lets you copy, move or discard keys from the pipeline. The manipulator section blueprint name is collective.transmogrifier.sections.manipulator.
A manipulator section will copy keys when you specify a set of keys to copy, and an expression to determine what to copy these to. These are the keys and destination options.
The keys option is a set of key names, one on each line; keynames starting with re: or regexp: are treated as regular expresions. The destination expression is a TALES expression that can access not only the item, but also the matched key and, if a regular expression was used, the match object.
If a delete option is specified, it is also interpreted as a set of keys, like the keys option. These keys will be deleted from the item; if used together with the keys and destination options, keys will be renamed instead of copied.
Also optional is the condition option, which lets you specify a TALES expression that when evaluating to False will prevent any manipulation from happening. The condition is evaluated for every matched key.
>>> manipulator = """
... [transmogrifier]
... pipeline =
... source
... copy
... rename
... delete
... logger
...
... [source]
... blueprint = collective.transmogrifier.sections.tests.samplesource
...
... [copy]
... blueprint = collective.transmogrifier.sections.manipulator
... keys =
... title
... id
... destination = string:$key-copy
...
... [rename]
... blueprint = collective.transmogrifier.sections.manipulator
... keys = re:([^-]+)-copy$
... destination = python:'%s-duplicate' % match.group(1)
... delete = ${rename:keys}
...
... [delete]
... blueprint = collective.transmogrifier.sections.manipulator
... delete = status
...
... [logger]
... blueprint = collective.transmogrifier.sections.logger
... name = logger
... level = INFO
... """
>>> registerConfig(u'collective.transmogrifier.sections.tests.manipulator',
... manipulator)
>>> transmogrifier(u'collective.transmogrifier.sections.tests.manipulator')
>>> print handler
logger INFO
{'id': 'foo',
'id-duplicate': 'foo',
'title': u'The Foo Fighters \u2117',
'title-duplicate': u'The Foo Fighters \u2117'}
logger INFO
{'id': 'bar',
'id-duplicate': 'bar',
'title': u'Brand Chocolate Bar \u2122',
'title-duplicate': u'Brand Chocolate Bar \u2122'}
logger INFO
{'id': 'monty-python',
'id-duplicate': 'monty-python',
'title': u"Monty Python's Flying Circus \xa9",
'title-duplicate': u"Monty Python's Flying Circus \xa9"}
>>> handler.clear()
The destination expression has access to the following:
item | the current pipeline item |
key | the name of the matched key |
match | if the key was matched by a regular expression, the match object, otherwise boolean True |
transmogrifier | the transmogrifier |
name | the name of the splitter section |
options | the splitter options |
modules | sys.modules |