An AT schema updater pipeline section is another important transmogrifier
content import pipeline element. It updates field values for Archetypes
objects based on their schema based on the items it processes. The AT schema
updater section blueprint name is
plone.app.transmogrifier.atschemaupdater. AT Schema updater sections
operate on objects already present in the ZODB, be they created by a
constructor or pre-existing objects.

Schema updating needs at least 1 piece of information: the path to the object
to update. To determine the path, the schema updater section inspects each
item and looks for one key, as described below. Any item missing this piece of
information will be skipped. Similarly, items with a path that doesn’t exist
or are not Archetypes objects will be skipped as well.

For the object path, it’ll look (in order) for
_plone.app.transmogrifier.atschemaupdater_[sectionname]_path,
_plone.app.transmogrifier.atschemaupdater_path, _[sectionname]_path
and _path, where [sectionname] is replaced with the name given to the
current section. This allows you to target the right section precisely if
needed. Alternatively, you can specify what key to use for the path by
specifying the path-key option, which should be a list of keys to try (one
key per line, use a re: or regexp: prefix to specify regular
expressions).

Paths to objects are always interpreted as relative to the context. Any
writable field who’s id matches a key in the current item will be updated with
the corresponding value, using the field’s mutator.

A browser default pipeline section sets the default-page on a folder, and the
layout template on content objects. They are the Transmogrifier equivalent of
the display menu in Plone. The browser default section blueprint name is
plone.app.transmogrifier.browserdefault. Browser default sections operate
on objects already present in the ZODB, be they created by a constructor or
pre-existing objects.

Setting the browser default needs at least 1 piece of information: the path to
the object to modify. To determine the path, the browser default section
inspects each item and looks for one key, as described below. Any item missing
this piece of information will be skipped. Similarly, items with a path that
doesn’t exist or do not support the Plone ISelectableBrowserDefault interface
will be skipped as well.

For the object path, it’ll look (in order) for
_plone.app.transmogrifier.browserdefault_[sectionname]_path,
_plone.app.transmogrifier.browserdefault_path, _[sectionname]_path
and _path, where [sectionname] is replaced with the name given to the
current section. This allows you to target the right section precisely if
needed. Alternatively, you can specify what key to use for the path by
specifying the path-key option, which should be a list of keys to try (one
key per line, use a re: or regexp: prefix to specify regular
expressions).

Once an object has been located, the section will looks for defaultpage
and layout keys. Like the path key, these can be specified in the source
configuration, named by the default-page-key and layout-key options,
respectively, and like the path key, the default keys the section looks for
are the usual list of specific-to-generic keys based on blueprint and section
names, from
_plone.app.transmogrifier.browserdefault_[sectionname]_defaultpage and
_plone.app.transmogrifier.browserdefault_[sectionname]_layout down to
_defaultpage and _layout.

The defaultpage key will set the id of the default page that should be
presented when the content object is loaded, and the layout key will set the
id of the layout to use for the content item.

A criterion adder section is used to add criteria to collections. It’s section
blueprint name is plone.app.transmogrifier.criterionadder. Criterion adder
sections operate on objects already present in the ZODB, be they created by a
constructor or pre-existing objects.

Given a path, a criterion type and a field name, this section will look up
a Collection at the given path, and add a criterion field, then alter the
path of the item so further sections will act on the added criterion. For
example, an item with keys _path=bar/baz, _field=modified and
_criterion=ATFriendlyDateCriteria will result in a new date criterion
added inside the bar/baz collection, and the item’s path will be updated
to bar/baz/crit__ATFriendlyDateCriteria_modified.

For the path, criterion type and field keys, it’ll look (in order) for
_plone.app.transmogrifier.atschemaupdater_[sectionname]_[key],
_plone.app.transmogrifier.atschemaupdater_[key], _[sectionname]_[key]
and _[key], where [sectionname] is replaced with the name given to the
current section and [key] is path, criterion and field
respectively. This allows you to target the right section precisely if
needed. Alternatively, you can specify what key to use for these by
specifying the path-key, criterion-key and field-key options,
which should be a list of keys to try (one key per line, use a re: or
regexp: prefix to specify regular expressions).

Paths to objects are always interpreted as relative to the context, and must
resolve to IATTopic classes.

When importing contents from a old site into a new, the path to the Plone site
root may have changed. This blueprint updates the old paths to match the new
structrue by removing or appending strings from the right side of the path
value.

A mime encapsulator section wraps arbitrary data in OFS.Image.File
objects, together with a MIME type. This wrapping is a pre-requisite for
Archetypes image, file or text fields, which can only take such File objects.
The mime encapsulator blueprint name is
plone.app.transmogrifier.mimeencapsulator.

An encapsulator section needs 3 pieces of information: the key at which to
find the data to encapsulate, the MIME type of this data, and the name of the
field where the encapsulated data will be stored. The idea is that the data
is copied from a “data key” (defaulting to _data and settable with the
data-key option), wrapped into a File object with a MIME type (read
from the mimetype option, which contains a TALES expression), and then
saved into the pipeline item dictionary under a new key, most likely
corresponding to an Archetypes field name (read from the field option,
which is also a TALES expression).

The data key defaults to the series _[blueprintname]_[sectionname]_data,
_[blueprintname]_data, _[sectionname]_data and _data, where
[blueprintname] is plone.app.transmogrifier.mimeencapsulator and
[sectionname] is replaced with the name of the current section. You can
override this by specifying the data-key option.

You specify the mimetype with the mimetype option, which takes a TALES
expression.

The field option, also a TALES expression, sets the output field name.

Optionally, you can specify a condition option, again a TALES expression,
that when evaluating to False, causes the section to skip encapsulation
for that item.

When importing contents from a old site into a new, the path to the Plone site
root may have changed. This blueprint updates the old paths to match the new
structrue by removing or appending strings from the right side of the path
value.

Blueprint name: plone.app.transmogrifier.pathfixer

Option path-key: The key of the item under which the path to be manipulated can

A portal transforms pipeline section lets you use Portal Transforms to
transform item values. The portal transforms section blueprint name is
plone.app.transmogrifier.portaltransforms.

What values to transform is determined by the keys option, which takes a
set of newline-separated key names. If a key name starts with re: or
regexp: it is treated as a regular expression instead.

You can specify what transformation to apply in two ways. Firstly, you can
directly specify a transformation by naming it with the transform option;
the named transformation is run directly. Alternatively you can let the portal
transforms tool figure out what transform to use by specifying target and
an optional from mimetype. The portal transforms tool will select one or
more transforms based on these mimetypes, and if no from option is given
the original item value is used to determine one.

Also optional is the condition option, which lets you specify a TALES
expression that when evaluating to False will prevent any transformations from
happening. The condition is evaluated for every matched key.

A ReindexObject section allows you to reindex an existing object in the
portal_catalog. ReindexObject sections operate on objects already present in the
ZODB, be they created by a constructor or pre-existing objects.

The ReindexObject blueprint name is plone.app.transmogrifier.reindexobject.

To determine the path, the ReindexObject section inspects each item and looks
for a path key, as described below. Any item missing this key will be skipped.
Similarly, items with a path that doesn’t exist or are not referenceable
(Archetypes) or do not inherit from CMFCatalogAware will be skipped as well.

The object path will be found under the first key found among the following:

_plone.app.transmogrifier.reindexobject_[sectionname]_path

_plone.app.transmogrifier.reindexobject_path

_[sectionname]_path

_path

where [sectionname] is replaced with the name given to the current section.
This allows you to target the right section precisely if needed.

Alternatively, you can specify what key to use for the path by specifying the
path-key option, which should be a list of keys to try (one key per line;
use a re: or regexp: prefix to specify regular expressions).

If an Archetypes content object is created in a pipeline, e.g. by the standard
content constructor section, it will get a new UID. If you are importing
content from another Plone site, and you have references (or links embedded
in content using Plone’s link-by-UID feature) to existing content, you may
want to retain UIDs. The UID updater section allows you to set the UID on an
existing object for this purpose.

The UID updater blueprint name is plone.app.transmogrifier.uidupdater.

UID updating requires two pieces of information: the path to the object
to update, and the new UID to set.

To determine the path, the UID updater section inspects each item and looks
for a path key, as described below. Any item missing this key will be skipped.
Similarly, items with a path that doesn’t exist or are not referenceable
(Archetypes) objects will be skipped.

The object path will be found under the first key found among the following:

_plone.app.transmogrifier.atschemaupdater_[sectionname]_path

_plone.app.transmogrifier.atschemaupdater_path

_[sectionname]_path

_path

where [sectionname] is replaced with the name given to the current
section. This allows you to target the right section precisely if
needed.

Alternatively, you can specify what key to use for the path by specifying the
path-key option, which should be a list of keys to try (one key per line;
use a re: or regexp: prefix to specify regular expressions).

Paths to objects are always interpreted as relative to the context.

Similarly, the UID to set must be a string under a given key. You can set the
key with the uid-key option, which behaves much like path-key. The
default is to look under:

_plone.app.transmogrifier.atschemaupdater_[sectionname]_uid

_plone.app.transmogrifier.atschemaupdater_uid

_[sectionname]_uid

_uid

If the UID key is missing, the item will be skipped.

Below is an example of a standard updater. The test uid source produces
items with two keys: a path under _path and a UID string under _uid.

A URLNormalizer section allows you to parse any piece of text into a url-safe
string which is then assigned to a specified key. It uses plone.i18n.normalizer
to perform the normalization. The url normalizer section blueprint name is
plone.app.transmogrifier.urlnormalizer.

The URL normalizer accepts the following optional keys -
source-key: The name of the object key that you wish to normalize,
destination-key: Where you want the normalized string to be stored,
locale: if you want the normalizer to be aware of locale, use this.

In this case only items containing the ‘language’ key have been processed, and
the destination-key has been set to the same value as the locale was. This is
more to illuminate the fact that the locale was set, rather than providing a
sensible use-case for destination-key.

If ZERO options are specified, the normalizer falls back to a set of default
values as follows:
source-key: title,
locale: en,
destination-key: _id

In this case, the destination-key is set to a controller variable, like _path,
as it is expected that the newly formed Id will in most cases be used further
down the pipeline in constructing the full, final path to the new Plone object.

It should be noted that this section can effectively transform any section of
text and turn it into a normalized, web safe string (max 255 chars) This string
does not necessarily need to be used for a URL.

A workflow updater pipeline section is another important transmogrifier content
import pipeline element. It executes workflow transitions on Plone content
based on the items it processes. The workflow updater section blueprint name is
plone.app.transmogrifier.workflowupdater. Workflow updater sections operate
on objects already present in the ZODB, be they created by a constructor or
pre-existing objects.

Workflow updating needs 2 pieces of information: the path to the object, and
what transitions to execute. To determine these, the workflow updater section
inspects each item and looks for two keys, as described below. Any item missing
any of these two pieces will be skipped. Similarly, items with a path that
doesn’t exist will be skipped as well.

For the object path, it’ll look (in order) for
_plone.app.transmogrifier.atschemaupdater_[sectionname]_path,
_plone.app.transmogrifier.atschemaupdater_path, _[sectionname]_path and
_path, where [sectionname] is replaced with the name given to the
current section. This allows you to target the right section precisely if
needed. Alternatively, you can specify what key to use for the path by
specifying the path-key option, which should be a list of keys to try (one
key per line, use a re: or regexp: prefix to specify regular
expressions).

For the transitions, use the transitions-key option (same interpretation
as path-key), defaulting to
_plone.app.transmogrifier.atschemaupdater_[sectionname]_transitions,
_plone.app.transmogrifier.atschemaupdater_transitions,
_[sectionname]_transitions and _transitions.

Unicode paths are encoded to ASCII. Paths to objects are always interpreted as
relative to the context object. Transitions are specified as a sequence of
transition names, or as a string specifying one transition, or a list of
dictionaries containing ‘action’ as transition id, ‘review_state’ as state id
and ‘time’ as a DateTime representing the transition time (if so, the worflow
history will be updated with the provided date). Transitions are executed in
order, failing transitions are silently ignored.

Ignore if workflow_history is not available on objects when running the
workflowupdater blueprint.
[thet]

Add datesupdater section to set creation_date and modification_date on
objects.
[thet]

Add pathfixer section to remove/prepend parts of the path.
[thet]

PEP 8.
[thet]

Fix uidsection for dexterity.
[shylux]

Allow to import transition date in the worflow history
[ebrehault]

Fix field accessor and mutator for updating schemaextended field values
with schemaupdater.
In some cases when using fields extended by schemaextender it defines
an accessor attribute which is not accessable. To cover all fields, its
better to access and mutate over the getAccessor and getMutator methods on
archetype fields.
[elioschmutz]

Add a section to manage plone.app.redirector and to use it to
update paths.
[rpatterson]

Support field accessor and mutator for updating field values with
schemaupdater.
[phgross]