Portlets exporter and importer sections ======================================= Portlets exporter and importer sections are used to migrate Plone 3 contextual portlet assignments and blacklist settings. The portlets exporter section blueprint name is ``quintagroup.transmogrifier.portletsexporter`` and importer section blueprint name is ``quintagroup.transmogrifier.portletsimporter``. Portlet assignments and blacklists are stored in XML format. Both sections need relative path to the object with portlets assigned and importer also needs XML data for updating them. 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. >>> import pprint >>> portlets = """ ... [transmogrifier] ... pipeline = ... portletssource ... portletsexporter ... printer ... dataprinter ... portletsimporter ... ... [portletssource] ... blueprint = quintagroup.transmogrifier.tests.portletssource ... ... [portletsexporter] ... blueprint = quintagroup.transmogrifier.portletsexporter ... ... [printer] ... blueprint = collective.transmogrifier.sections.tests.pprinter ... ... [dataprinter] ... blueprint = quintagroup.transmogrifier.tests.dataprinter ... print = ... _files ... portlets ... data ... ... [portletsimporter] ... blueprint = quintagroup.transmogrifier.portletsimporter ... files-key = files ... """ >>> registerConfig(u'quintagroup.transmogrifier.tests.portlets', portlets) >>> transmogrifier(u'quintagroup.transmogrifier.tests.portlets') # doctest: +ELLIPSIS, +REPORT_NDIFF {} {'_path': 'not/existing/bar'} {'_path': 'spam/eggs/notassignable'} {'_files': {'portlets': {'data': ... 'name': '.portlets.xml'}}, '_path': 'assignable'} 10 http://sumno.com/feeds/main-page/ RSS feed 60 {'_files': {'portlets': {'data': ... 'name': '.portlets.xml'}}, '_path': 'other-assignable', 'files': {'portlets': {'data': ... 'name': '.portlets.xml'}}} 10 http://sumno.com/feeds/main-page/ RSS feed 60 New portlet must be added to existent ones. >>> 'habra-rss' in mapping True >>> mapping['habra-rss'].count 20 >>> mapping['habra-rss'].url u'http://habrahabr.ru/rss/' >>> mapping['habra-rss'].portlet_title u'Habrahabr RSS feed' >>> mapping['habra-rss'].timeout 120 >>> 'rss' in mapping True >>> mapping['rss'].count 10 >>> mapping['rss'].url u'http://sumno.com/feeds/main-page/' >>> mapping['rss'].portlet_title u'RSS feed' >>> mapping['rss'].timeout 60 Export sections has also ``purge`` option which specifies if portlets must be purged before exporting. The ``purge`` option set to ``False`` by default and not purge existent portlets. To force purging - it must be set to ``True``. >>> portlets2 = """ ... [transmogrifier] ... pipeline = ... portletssource ... portletsexporter ... printer ... dataprinter ... portletsimporter ... ... [portletssource] ... blueprint = quintagroup.transmogrifier.tests.portletssource2 ... ... [portletsexporter] ... blueprint = quintagroup.transmogrifier.portletsexporter ... ... [printer] ... blueprint = collective.transmogrifier.sections.tests.pprinter ... ... [dataprinter] ... blueprint = quintagroup.transmogrifier.tests.dataprinter ... print = ... _files ... portlets ... data ... ... [portletsimporter] ... blueprint = quintagroup.transmogrifier.portletsimporter ... files-key = files ... purge = True ... """ >>> registerConfig(u'quintagroup.transmogrifier.tests.portlets2', portlets2) >>> transmogrifier(u'quintagroup.transmogrifier.tests.portlets2') # doctest: +ELLIPSIS, +REPORT_NDIFF {} {'_files': {'portlets': {'data': ... 'name': '.portlets.xml'}}, '_path': 'other-assignable', 'files': {'portlets': {'data': ... 'name': '.portlets.xml'}}} 10 http://sumno.com/feeds/main-page/ RSS feed 60 20 http://habrahabr.ru/rss/ Habrahabr RSS feed 120 Now only 'sumno-rss-2' portlet must be present in mapping after portlets purging. >>> 'habra-rss' in mapping False >>> 'rss' in mapping False >>> 'sumno-rss-2' in mapping True >>> mapping['sumno-rss-2'].count 30 >>> mapping['sumno-rss-2'].url u'http://sumno.com/rss' >>> mapping['sumno-rss-2'].portlet_title u'Sumno RSS feed' >>> mapping['sumno-rss-2'].timeout 360