Properties exporter and importer sections ========================================= Properties exporter and importer sections are used to migrate properties for objects that inherit from OFS.PropertyManager.PropertyManager mixin class. The properties exporter section blueprint name is ``quintagroup.transmogrifier.propertiesexporter`` and importer section blueprint name is ``quintagroup.transmogrifier.propertiesimporter``. Properties are represented in XML format and this is done with help of GenericSetup.utils.PropertyManagerHelpers class. Both sections need relative path to the object with properties and importer also needs XML data for updating properties. Both sections has ``path-key`` option which specifies key in item where path to object is stored (``_path`` is default) and ``files-key`` option that gives key where XML data will be or is stored. Exporter section also has ``exclude`` option that give global list of property ids to exclude on serializing and ``exclude-key`` option, that specifies key where same list per item is stored (default is ``_excluded_properties``). Properties that are present in any of these lists are excluded. >>> import pprint >>> propertymanager = """ ... [transmogrifier] ... pipeline = ... propertymanagersource ... propertiesexporter ... printer ... dataprinter ... propertiesimporter ... ... [propertymanagersource] ... blueprint = quintagroup.transmogrifier.tests.propertymanagersource ... ... [propertiesexporter] ... blueprint = quintagroup.transmogrifier.propertiesexporter ... exclude = ... title ... notexistentprop ... ... [printer] ... blueprint = collective.transmogrifier.sections.tests.pprinter ... ... [dataprinter] ... blueprint = quintagroup.transmogrifier.tests.dataprinter ... print = ... _files ... propertymanager ... data ... ... [propertiesimporter] ... blueprint = quintagroup.transmogrifier.propertiesimporter ... exclude = author ... """ >>> registerConfig(u'quintagroup.transmogrifier.tests.propertymanager', propertymanager) >>> transmogrifier(u'quintagroup.transmogrifier.tests.propertymanager') # doctest: +ELLIPSIS, +REPORT_NDIFF {} {'_path': 'not/existing/bar'} {'_path': 'spam/eggs/notatcontent'} {'_excluded_properties': ('encoding',), '_files': {'propertymanager': {'data': ... 'name': '.properties.xml'}}, '_path': 'spam/eggs/foo'} value value >>> pprint.pprint(plone.updated) ('spam/eggs/foo', 'description', 'value')