From 5c1118888c7e810e0efc2dd3e485072f7cd1487e Mon Sep 17 00:00:00 2001 From: Romain Courteaud <romain@nexedi.com> Date: Wed, 5 Nov 2008 15:43:52 +0000 Subject: [PATCH] Cache text conversion of image. git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@24495 20353a03-c40f-0410-a6d1-a30d3c3de9de --- product/ERP5/Document/Image.py | 48 ++++++++++++++++++++-------------- 1 file changed, 29 insertions(+), 19 deletions(-) diff --git a/product/ERP5/Document/Image.py b/product/ERP5/Document/Image.py index e63bd931e9..287a746ee5 100644 --- a/product/ERP5/Document/Image.py +++ b/product/ERP5/Document/Image.py @@ -304,6 +304,31 @@ class Image(File, OFSImage): return displays + security.declarePrivate('_convertToText') + def _convertToText(self, format): + """ + Convert the image to text with portaltransforms + """ + mime_type = getToolByName(self, 'mimetypes_registry').\ + lookupExtension('name.%s' % format) + src_mimetype = self.getContentType() + content = '%s' % self.getData() + if content is not None: + portal_transforms = getToolByName(self, 'portal_transforms') + result = portal_transforms.convertToData(mime_type, content, + object=self, context=self, + filename=self.title_or_id(), + mimetype=src_mimetype) + if result is None: + # portal_transforms fails to convert. + LOG('TextDocument.convert', WARNING, + 'portal_transforms failed to convert to %s: %r' % (mime_type, self)) + result = '' + return mime_type, result + else: + # text_content is not set, return empty string instead of None + return mime_type, '' + # Conversion API security.declareProtected(Permissions.ModifyPortalContent, 'convert') def convert(self, format, display=None, quality=75, resolution=None, frame=None, **kw): @@ -311,25 +336,10 @@ class Image(File, OFSImage): Implementation of conversion for PDF files """ if format in ('text', 'txt', 'html', 'base_html', 'stripped-html'): - mime_type = getToolByName(self, 'mimetypes_registry').\ - lookupExtension('name.%s' % format) - src_mimetype = self.getContentType() - content = '%s' % self.getData() - if content is not None: - portal_transforms = getToolByName(self, 'portal_transforms') - result = portal_transforms.convertToData(mime_type, content, - object=self, context=self, - filename=self.title_or_id(), - mimetype=src_mimetype) - if result is None: - # portal_transforms fails to convert. - LOG('TextDocument.convert', WARNING, - 'portal_transforms failed to convert to %s: %r' % (mime_type, self)) - result = '' - return mime_type, result - else: - # text_content is not set, return empty string instead of None - return mime_type, '' + if not self.hasConversion(format=format): + mime_type, data = self._convertToText(format) + self.setConversion(data, mime=mime_type, format=format) + return self.getConversion(format=format) image_size = self.getSizeFromImageDisplay(display) if (display is not None or resolution is not None or quality != 75 or format != ''\ or frame is not None) and image_size: -- 2.30.9