From 9134e865f476aa366f7866f3f1933f2a74e9c905 Mon Sep 17 00:00:00 2001 From: Jean-Paul Smets <jp@nexedi.com> Date: Tue, 25 Dec 2007 11:13:41 +0000 Subject: [PATCH] Fixed some issues related to conversion handling of presentations to images with resizing. (untested) Use of UnrestrictedMethod for HTML conversion. git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@18513 20353a03-c40f-0410-a6d1-a30d3c3de9de --- product/ERP5/Document/Document.py | 4 +++- product/ERP5/Document/Image.py | 11 +++++++---- product/ERP5OOo/Document/OOoDocument.py | 20 ++++++++++++-------- 3 files changed, 22 insertions(+), 13 deletions(-) diff --git a/product/ERP5/Document/Document.py b/product/ERP5/Document/Document.py index 0349279ed2..ad99e62669 100644 --- a/product/ERP5/Document/Document.py +++ b/product/ERP5/Document/Document.py @@ -175,7 +175,9 @@ class ConversionCacheMixin: if mime is not None: self._cached_mime[tformat] = mime if data is not None: - self._cached_data[tformat] = data + self._cached_data[tformat] = aq_base(data) # Use of aq_base + # is useful to remove the wrapper from a temp object + # which may have been used to generate data self.updateConversion(**format) self._p_changed = 1 diff --git a/product/ERP5/Document/Image.py b/product/ERP5/Document/Image.py index 967a98a580..3dd40e59b5 100644 --- a/product/ERP5/Document/Image.py +++ b/product/ERP5/Document/Image.py @@ -42,6 +42,8 @@ from DocumentTemplate.DT_Util import html_quote from Products.CMFCore.utils import _setCacheHeaders from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface from Products.ERP5.Document.File import File +from Products.ERP5.Document.Document import ConversionError + from OFS.Image import Image as OFSImage from OFS.Image import getImageInfo from OFS.content_types import guess_content_type @@ -379,13 +381,12 @@ class Image(File, OFSImage): else: from popen2 import popen2 if resolution is None: - imgout, imgin = popen2('convert -quality %s -geometry %sx%s -%s %s-' - % (quality, width, height, frame, format)) + cmd = 'convert -quality %s -geometry %sx%s -%s %s-' % ( + quality, width, height, frame, format) else: - # LOG('Resolution',0,str(resolution)) cmd = 'convert -density %sx%s -quality %s -geometry %sx%s -%s %s-' % ( resolution, resolution, quality, width, height, frame, format) - imgout, imgin = popen2(cmd) + imgout, imgin = popen2(cmd) def writeData(stream, data): if isinstance(data, str): @@ -401,6 +402,8 @@ class Image(File, OFSImage): imgin.close() newimg.write(imgout.read()) imgout.close() + if not newimg.tell(): + raise ConversionError('Image conversion failed (empty file).') newimg.seek(0) return newimg diff --git a/product/ERP5OOo/Document/OOoDocument.py b/product/ERP5OOo/Document/OOoDocument.py index 7d008abaab..4ec8010c9d 100644 --- a/product/ERP5OOo/Document/OOoDocument.py +++ b/product/ERP5OOo/Document/OOoDocument.py @@ -37,6 +37,7 @@ from OFS.Image import Pdata from Products.CMFCore.utils import getToolByName, _setCacheHeaders from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface from Products.ERP5Type.Cache import CachingMethod +from Products.ERP5Type.UnrestrictedMethod import UnrestrictedMethod from Products.ERP5.Document.File import File from Products.ERP5.Document.Document import ConversionCacheMixin from Products.ERP5.Document.Document import ConversionError @@ -310,7 +311,7 @@ class OOoDocument(File, ConversionCacheMixin): z.close() return 'text/plain', s server_proxy = self._mkProxy() - + generate_result = server_proxy.run_generate(self.getId(), enc(_unpackData(self.getBaseData())), None, @@ -321,7 +322,7 @@ class OOoDocument(File, ConversionCacheMixin): # This is for backward compatibility with older oood version returning # only response_dict response_dict = generate_result - + # XXX: handle possible OOOd server failure return response_dict['mime'], Pdata(dec(response_dict['data'])) @@ -401,7 +402,7 @@ class OOoDocument(File, ConversionCacheMixin): portal_type='Image', temp_object=1) temp_image._setData(data) - mime, data = temp_image.convert(format, display=display) + mime, data = temp_image.convert(original_format, display=display) self.setConversion(data, mime, format=format, display=display) if display is None or original_format not in STANDARD_IMAGE_FORMAT_LIST: return self.getConversion(format=format) @@ -426,7 +427,7 @@ class OOoDocument(File, ConversionCacheMixin): """ if zip_file is None: format_list = [x for x in self.getTargetFormatList() - if x.startswith('html')] + if x.startswith('html') or x.endswith('html')] format = format_list[0] mime, data = self._convert(format) archive_file = cStringIO.StringIO() @@ -437,13 +438,16 @@ class OOoDocument(File, ConversionCacheMixin): must_close = 0 for f in zip_file.infolist(): file_name = f.filename - if not file_name.endswith('html'): + if not file_name.endswith('html'): # XXX - we must add here more values in order to + # support multi-page HTML conversions + # such as for presentations. document = self.get(file_name, None) if document is not None: self.manage_delObjects([file_name]) - self.portal_contributions.newContent(id=file_name, container=self, - file_name=file_name, - data=zip_file.read(file_name)) + newContent = UnrestrictedMethod(self.portal_contributions.newContent) + newContent(id=file_name, container=self, + file_name=file_name, + data=zip_file.read(file_name)) if must_close: zip_file.close() archive_file.close() -- 2.30.9