buildout configuration file:
[transmogrifier]
pipeline =
source
transform 1
transform 2
create
[source]
blueprint = example.transmogrifier.source
[transform 1]
blueprint = example.transmogrifier.transform
from_field = text
to_field = text
transform = rst
condition = python:item['filename'].endswith('.rst')
[transform 2]
blueprint = example.transmogrifier.transform
from_field = text
to_field = description
transform = get_first_paragraph
[create]
blueprint = example.transmogrifier.constructor
<configure
xmlns="http://namespaces.zope.org/zope"
xmlns:tg="http://namespaces.plone.org/transmogrifier"
i18n_domain="example.transmogrifier">
<tg:registerConfig
name="exampleconfig"
title="Example"
description="Example pipeline config"
configuration="example.cfg"
/>
ordered list of blueprints
[transmogrifier]
pipeline =
source
transform 1
transform 2
create
[source]
blueprint = example.transmogrifier.source
<utility
component=".source.ExampleSource"
name="example.transmogrifier.source"
/>
class ExampleSource(object):
classProvides(ISectionBlueprint)
implements(ISection)
def __init__(self, transmogrifier, name, options, previous):
self.previous = previous
self.name = name
def __iter__(self):
for item in self.previous:
yield item
for record in ReadJSONFile():
yield dict(_path=normalize(record['title']),
_type=”Document”,
title=record['title'],
text=record['text'])
[transform 1]
blueprint = example.transmogrifier.transform
from_field = text
to_field = text
transform = rst
condition = python:item['filename'].endswith('.rst')
<utility
component=".transform.ExampleTransform"
name="example.transmogrifier.transform"
/>
class ExampleTranform(object):
classProvides(ISectionBlueprint)
implements(ISection)
def __init__(self, transmogrifier, name, options, previous):
self.previous = previous
self.from_field = options['from_field']
self.to_field = options['to_field']
self.tranform = options['tranform']
self.condition = Condition(condition, transmogrifier, name, options)
def __iter__(self):
for item in self.previous:
if self.condition(item):
if 'rst' == self.transform:
item[self.to_field] = TransformFromRSTToHTML(item[self.from_field])
elif 'get_first_paragraph' == self.transform:
item[self.to_field] = GetFirstParagraph(item[self.to_field])
yield item