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 |