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())