Exemplo n.º 1
0
    def export(self, request, stream=None, in_memory=False, **options):
        if stream is None:
            stream = io.BytesIO()
            in_memory = True
        archive = ZipFile(stream, "w", ZIP_DEFLATED)

        exporter = Exporter(self.context, request, options)
        # Export context to xml and add xml to zip
        export = exporter.getStream()
        archive.write(export.filename, 'silva.xml')
        export.close()

        # process data from the export, i.e. export binaries
        for path, id in exporter.getAssetPaths():
            asset = self.context.restrictedTraverse(path)
            payload = IAssetPayload(asset, None)
            if payload is not None:
                payload = payload.get_payload()
                if payload is not None:
                    archive.writestr('assets/' + id, payload)

        unknowns = exporter.getZexpPaths()
        if unknowns:
            # This is required is exported content have been created
            # in the same transaction than the export. They need to be
            # in the database in order to be exported.
            transaction.savepoint()
            for path, id in unknowns:
                export = io.BytesIO()
                content = self.context.restrictedTraverse(path)
                content._p_jar.exportFile(content._p_oid, export)
                archive.writestr('zexps/' + id, export.getvalue())
                export.close()

        archive.close()
        if in_memory:
            return stream.getvalue()
        return stream
 def transform(self, context, request, options={}):
     options.update({'external_rendering': True, 'only_previewable': True})
     exporter = Exporter(context, request, options)
     return self.transform_xml(exporter.getString())
 def transform(self, context, request, options={}):
     options.update({'external_rendering': True, 'only_previewable': True})
     exporter = Exporter(context, request, options)
     return self.transform_xml(exporter.getString())