File fields exporter and importer sections ========================================== File fields importer and exporter sections are used to extract data from Archetypes file fields. The exporter section blueprint name is ``quintagroup.transmogrifier.fileexporter`` and the importer section blueprint name is ``quintagroup.transmogrifier.fileimporter``. Exporter needs relative path to the object, that have file fields. Improter needs path and data for updating fields. Both sections has ``path-key`` option which specify 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-key`` option, that specifies key where list of file field names will be stored (default is ``_excluded_fields``). These list will be used in marshaller section. Also this section provides condition option which, if specified, exports/imports this or another binary field only if condition expression evaluates to true. >>> import pprint >>> binary = """ ... [transmogrifier] ... pipeline = ... binarysource ... fileexporter ... fileimporter ... printer ... dataprinter ... ... [binarysource] ... blueprint = quintagroup.transmogrifier.tests.binarysource ... ... [fileexporter] ... blueprint = quintagroup.transmogrifier.fileexporter ... condition = python:fname != 'image' ... ... [dataprinter] ... blueprint = quintagroup.transmogrifier.tests.dataprinter ... print = ... _files ... file-fields ... data ... ... [fileimporter] ... blueprint = quintagroup.transmogrifier.fileimporter ... ... [printer] ... blueprint = collective.transmogrifier.sections.tests.pprinter ... """ >>> registerConfig(u'quintagroup.transmogrifier.tests.marshall', binary) >>> transmogrifier(u'quintagroup.transmogrifier.tests.marshall') # doctest: +REPORT_NDIFF, +ELLIPSIS {} {'_path': 'not/existing/bar'} {'_path': 'spam/eggs/notatcontent'} {'_excluded_fields': ['image', 'file'], '_files': {'archive.tar.gz': {'content_type': 'application/x-tar', 'data': 'binary data', 'name': 'archive.tar.gz'}, 'file-fields': {'data': ..., 'name': '.file-fields.xml'}}, '_path': 'spam/eggs/foo'} archive.tar.gz application/x-tar >>> pprint.pprint(plone.updated) ('archive.tar.gz', 'application/x-tar', 'binary data') TODO: write test for getting data for fields from import context The ``condition`` expression hass access to the following: =================== ========================================================== ``item`` the current pipeline item ``transmogrifier`` the transmogrifier ``name`` the name of the splitter section ``options`` the splitter options ``modules`` sys.modules ``context`` the current content object ``fname`` the name of the field being processed ``filename`` the file name binary field is loaded into (import only) ``data`` data read from the file (import only) ``mimetype`` data mimetype (import only) =================== ==========================================================