From 57048f138750afdaf8a48a890f298e0425d2387f Mon Sep 17 00:00:00 2001 From: Rie Kozai <rie@nexedi.com> Date: Fri, 27 Jul 2007 18:33:23 +0000 Subject: [PATCH] implement batch_mode correctly and test it. git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@15372 20353a03-c40f-0410-a6d1-a30d3c3de9de --- product/ERP5OOo/Document/OOoDocument.py | 2 +- product/ERP5OOo/OOoTemplate.py | 81 ++++++------ product/ERP5OOo/OOoUtils.py | 5 +- .../ERP5OOo/tests/PersonSpreadsheetStylesheet | Bin 0 -> 8926 bytes product/ERP5OOo/tests/testOOoBatchMode.py | 124 ++++++++++++++++++ 5 files changed, 170 insertions(+), 42 deletions(-) create mode 100644 product/ERP5OOo/tests/PersonSpreadsheetStylesheet create mode 100644 product/ERP5OOo/tests/testOOoBatchMode.py diff --git a/product/ERP5OOo/Document/OOoDocument.py b/product/ERP5OOo/Document/OOoDocument.py index 78fcec11ad..66950f90cf 100644 --- a/product/ERP5OOo/Document/OOoDocument.py +++ b/product/ERP5OOo/Document/OOoDocument.py @@ -373,7 +373,7 @@ class OOoDocument(File, ConversionCacheMixin): if display is None or original_format not in STANDARD_IMAGE_FORMAT_LIST: self.setConversion(data, mime, format=format) else: - temp_image = self.portal_contributions.newContent( + self.portal_contributions.newContent( portal_type='Image', temp_object=1) temp_image._setData(data) diff --git a/product/ERP5OOo/OOoTemplate.py b/product/ERP5OOo/OOoTemplate.py index 00e820cd80..7d6848fc45 100644 --- a/product/ERP5OOo/OOoTemplate.py +++ b/product/ERP5OOo/OOoTemplate.py @@ -51,6 +51,8 @@ try: except ImportError: SUPPORTS_WEBDAV_LOCKS = 0 +from Products.ERP5.Document.Document import ConversionError + # Constructors manage_addOOoTemplate = DTMLFile("dtml/OOoTemplate_add", globals()) @@ -63,11 +65,12 @@ def addOOoTemplate(self, id, title="", REQUEST=None): """ # add actual object id = self._setObject(id, OOoTemplate(id, title)) - file = REQUEST.form.get('file') - if file.filename: - # Get the template in the associated context and upload the file - getattr(self,id).pt_upload(REQUEST, file) - # respond to the add_and_edit button if necessary + if REQUEST is not None: + file = REQUEST.form.get('file') + if file.filename: + # Get the template in the associated context and upload the file + getattr(self,id).pt_upload(REQUEST, file) + # respond to the add_and_edit button if necessary add_and_edit(self, id, REQUEST) return '' @@ -394,9 +397,8 @@ xmlns:config="http://openoffice.org/2001/config" office:version="1.0"> def pt_render(self, source=0, extra_context={}): # Get request request = extra_context.get('REQUEST', None) - if not request: - request = get_request() - + if request is None: + request = self.REQUEST # Get parent object (the one to render this template on) here = getattr(self, 'aq_parent', None) if here is None: @@ -413,6 +415,7 @@ xmlns:config="http://openoffice.org/2001/config" office:version="1.0"> ooo_builder = OOoBuilder(ooo_document) # Pass builder instance as extra_context extra_context['ooo_builder'] = ooo_builder + # And render page template doc_xml = ZopePageTemplate.pt_render(self, source=source, extra_context=extra_context) @@ -423,6 +426,7 @@ xmlns:config="http://openoffice.org/2001/config" office:version="1.0"> default_styles_text = ooo_builder.extract('styles.xml') except AttributeError: default_styles_text = None + # Add the associated files for dir_name, document_dict in attachments_dict.iteritems(): # Special case : the document is an OOo one @@ -441,9 +445,6 @@ xmlns:config="http://openoffice.org/2001/config" office:version="1.0"> ooo_builder.addFileEntry(full_path=dir_name, media_type=document_dict['doc_type'], content = document_dict['document'] ) - # Get request and batch_mode - batch_mode = extra_context.get('batch_mode', 0) - # Debug mode if request.get('debug',0): return doc_xml @@ -457,6 +458,12 @@ xmlns:config="http://openoffice.org/2001/config" office:version="1.0"> except AttributeError: self.OLE_documents_zipstring = None + # Convert if necessary + opts = extra_context.get("options", None) + + # Get request and batch_mode + batch_mode = opts.get('batch_mode', None) + # If the file has embedded OLE documents, restore it if self.OLE_documents_zipstring: additional_builder = OOoBuilder( self.OLE_documents_zipstring ) @@ -467,24 +474,22 @@ xmlns:config="http://openoffice.org/2001/config" office:version="1.0"> ooo_builder.updateManifest() # Produce final result - ooo = ooo_builder.render(self.title or self.id) - - # Convert if necessary - opts = extra_context.get("options", None) + ooo = ooo_builder.render(name=self.title or self.id) + if opts is not None: format = opts.get('format', request.get('format', None)) if format: - return self._asFormat(ooo, format, request) + return self._asFormat(ooo, format, request, batch_mode) - # Do not send a RESPONSE if in batch_mode - if request and not batch_mode: + if format is None and not batch_mode: request.RESPONSE.setHeader('Content-Type','%s;; charset=utf-8' % self.content_type) - request.RESPONSE.setHeader('Content-Length',len(ooo)) - request.RESPONSE.setHeader('Content-Disposition','inline;filename=%s' % - self.title_or_id()) - + request.RESPONSE.setHeader('Content-disposition', 'inline;filename=%s' % self.title_or_id()) + else: + request.RESPONSE.setHeader('Content-Type','%s;; charset=utf-8' % 'text/html') + request.RESPONSE.setHeader('Content-disposition', 'inline;filename=%s' % self.title_or_id()) + return ooo - + def om_icons(self): """Return a list of icon URLs to be displayed by an ObjectManager""" icons = ({'path': 'misc_/ERP5OOo/OOo.png', @@ -503,8 +508,8 @@ xmlns:config="http://openoffice.org/2001/config" office:version="1.0"> """ return self._asFormat(ooo, 'pdf', REQUEST) - def _asFormat(self, ooo, format, REQUEST=None): - # now create a temp OOoDocument to convert data to pdf + def _asFormat(self, ooo, format, REQUEST=None, batch_mode=0): + # Now create a temp OOoDocument to convert data to pdf from Products.ERP5Type.Document import newTempOOoDocument tmp_ooo = newTempOOoDocument(self, self.title_or_id()) tmp_ooo.edit(base_data=ooo, @@ -512,30 +517,30 @@ xmlns:config="http://openoffice.org/2001/config" office:version="1.0"> source_reference=self.title_or_id(), base_content_type=self.content_type,) tmp_ooo.oo_data = ooo - - if format == 'pdf': - # slightly different implementation + if format == 'pdf' and not batch_mode: + # Slightly different implementation # now convert it to pdf tgts = [x[1] for x in tmp_ooo.getTargetFormatItemList() if x[1].endswith('pdf')] if len(tgts) > 1: - raise ValueError, 'multiple pdf formats found - this shouldnt happen' + REQUEST.RESPONSE.setHeader('Content-type', 'text/html') + REQUEST.RESPONSE.setHeader('Content-disposition', 'inline;filename=%s.pdf' % self.title_or_id()) + raise ValueError, 'multiple pdf formats found - this shouldnt happen' if len(tgts) == 0: - raise ValueError, 'no pdf format found' + REQUEST.RESPONSE.setHeader('Content-type', 'text/html') + REQUEST.RESPONSE.setHeader('Content-disposition', 'inline;filename=%s.pdf' % self.title_or_id()) + raise ValueError, 'no pdf format found' fmt = tgts[0] mime, data = tmp_ooo.convert(fmt) if REQUEST is not None: - REQUEST.RESPONSE.setHeader('Content-type', 'application/pdf') - REQUEST.RESPONSE.setHeader('Content-disposition', - 'attachment;; filename="%s.pdf"' % self.title_or_id()) + REQUEST.RESPONSE.setHeader('Content-type', 'application/pdf') + REQUEST.RESPONSE.setHeader('Content-disposition', 'attachment;filename=%s.pdf' % self.title_or_id()) return data - - mime, data = tmp_ooo.convert(format) + mime , data = tmp_ooo.convert(format) if REQUEST is not None: REQUEST.RESPONSE.setHeader('Content-type', mime) - REQUEST.RESPONSE.setHeader('Content-disposition', - 'attachment;; filename="%s.%s"' % (self.title_or_id(),format)) - # FIXME the above lines should return zip format when html was requested + REQUEST.RESPONSE.setHeader('Content-disposition', 'attachment;filename=%s.%s' % (self.title_or_id(),format)) + # FIXME the above lines should return zip format when html was requested return data InitializeClass(OOoTemplate) diff --git a/product/ERP5OOo/OOoUtils.py b/product/ERP5OOo/OOoUtils.py index a41d2312b9..a45d255523 100644 --- a/product/ERP5OOo/OOoUtils.py +++ b/product/ERP5OOo/OOoUtils.py @@ -176,7 +176,6 @@ class OOoBuilder: """ Add a path to the manifest """ MANIFEST_FILENAME = 'META-INF/manifest.xml' meta_infos = self.extract(MANIFEST_FILENAME) - # prevent some duplicates for meta_line in meta_infos.split('\n'): for new_meta_line in self._manifest_additions_list: @@ -207,9 +206,9 @@ class OOoBuilder: returns the OOo document """ request = get_request() - request.response.setHeader('Content-type', OOo_mimeType_dict.get(extension, 'application/vnd.sun.xml.writer')) if name: - request.response.setHeader('Content-Disposition', 'attachment; filename=%s.%s' % (name, extension)) + request.response.setHeader('Content-Disposition', 'inline; filename=%s.%s' % (name, extension)) + self._document.seek(0) return self._document.read() diff --git a/product/ERP5OOo/tests/PersonSpreadsheetStylesheet b/product/ERP5OOo/tests/PersonSpreadsheetStylesheet new file mode 100644 index 0000000000000000000000000000000000000000..34e59f79b5bbf0ae0a05b7ad92abda2a5fa766c6 GIT binary patch literal 8926 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 literal 0 HcmV?d00001 diff --git a/product/ERP5OOo/tests/testOOoBatchMode.py b/product/ERP5OOo/tests/testOOoBatchMode.py new file mode 100644 index 0000000000..b345797a7c --- /dev/null +++ b/product/ERP5OOo/tests/testOOoBatchMode.py @@ -0,0 +1,124 @@ +############################################################################## +# +# Copyright (c) 2004, 2005, 2006 Nexedi SARL and Contributors. +# All Rights Reserved. +## +# WARNING: This program as such is intended to be used by professional +# programmers who take the whole responsability of assessing all potential +# consequences resulting from its eventual inadequacies and bugs +# End users who are looking for a ready-to-use solution with commercial +# garantees and support are strongly adviced to contract a Free Software +# Service Company +# +# This program is Free Software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +############################################################################## + +import os +import sys +import Zope +from AccessControl.SecurityManagement import newSecurityManager +from Testing import ZopeTestCase +from Products.PageTemplates.GlobalTranslationService import setGlobalTranslationService +from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase +from Testing.makerequest import makerequest +from Products.ERP5.Document.Document import ConversionError +from App.config import getConfiguration + +class TestOoodResponse(ERP5TypeTestCase): + + manager_username = 'rie' + manager_password = 'rie' + quiet = 1 + run_all_test = 1 + + def getTitle(self): + return "TestOOoBatchMode" + + def login(self, quiet=0, run=run_all_test): + uf = self.getPortal().acl_users + uf._doAddUser(self.manager_username, self.manager_password, ['Manager'], []) + user = uf.getUserById(self.manager_username).__of__(uf) + newSecurityManager(None, user) + + def getBusinessTemplateList(self): + return () + + def afterSetUp(self): + self.login() + portal_skins = self.getSkinsTool() + portal_skins.custom.REQUEST.RESPONSE.setHeader('content-type', 'text/html') + try: + import_file_path = os.path.join(getConfiguration().instancehome, + 'Products', + 'ERP5OOo', + 'tests', + 'PersonSpreadsheetStylesheet' ) + except IOError: + import_file_path = os.path.join(getConfiguration().softwarehome, + 'Products', + 'ERP5OOo', + 'tests', + 'PersonSpreadsheetStylesheet') + + import_file = open(import_file_path) + addStyleSheet = portal_skins.custom.manage_addProduct['OFSP'].manage_addFile + addStyleSheet(id='Base_getODTStyleSheet', file=import_file, title='', precondition='', content_type='application/vnd.oasis.opendocument.text') + addOOoTemplate = portal_skins.custom.manage_addProduct['ERP5OOo'].addOOoTemplate + addOOoTemplate(id='ERP5Site_viewNothingAsOdt', title='') + portal_skins.changeSkin(skinname=None) + ERP5Site_viewNothingAsOdt = self.getPortal().ERP5Site_viewNothingAsOdt + text = "<office:document-content xmlns:draw='urn:oasis:names:tc:opendocument:xmlns:drawing:1.0' xmlns:office='urn:oasis:names:tc:opendocument:xmlns:office:1.0' xmlns:text='urn:oasis:names:tc:opendocument:xmlns:text:1.0' xmlns:ooo='http://openoffice.org/2004/office' xmlns:number='urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0' xmlns:dc='http://purl.org/dc/elements/1.1/' xmlns:meta='urn:oasis:names:tc:opendocument:xmlns:meta:1.0' xmlns:table='urn:oasis:names:tc:opendocument:xmlns:table:1.0' xmlns:dr3d='urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0' xmlns:fo='urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0' xmlns:style='urn:oasis:names:tc:opendocument:xmlns:style:1.0' xmlns:xforms='http://www.w3.org/2002/xforms' xmlns:form='urn:oasis:names:tc:opendocument:xmlns:form:1.0' xmlns:script='urn:oasis:names:tc:opendocument:xmlns:script:1.0' xmlns:ooow='http://openoffice.org/2004/writer' xmlns:svg='urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0' xmlns:chart='urn:oasis:names:tc:opendocument:xmlns:chart:1.0' xmlns:dom='http://www.w3.org/2001/xml-events' xmlns:xlink='http://www.w3.org/1999/xlink' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:oooc='http://openoffice.org/2004/calc' xmlns:math='http://www.w3.org/1998/Math/MathML' xmlns:tal='http://xml.zope.org/namespaces/tal'></office:document-content>" + content_type = 'application/vnd.oasis.opendocument.text' + ERP5Site_viewNothingAsOdt.pt_edit(text, content_type) + + def test_01_noExcNoFormatNoBatchMode(self): + portal_skins = self.getSkinsTool() + portal_skins.custom.REQUEST.RESPONSE.setHeader('content-type', 'text/html') + ERP5Site_viewNothingAsOdt = self.getPortal().ERP5Site_viewNothingAsOdt + ERP5Site_viewNothingAsOdt(batch_mode=0) + self.assertEqual('application/vnd.oasis.opendocument.text', portal_skins.custom.REQUEST.RESPONSE.getHeader('content-type').split(';')[0]) + self.assertEqual('inline;filename=ERP5Site_viewNothingAsOdt', portal_skins.custom.REQUEST.RESPONSE.getHeader('content-disposition')) + + def test_02_noExcNoFormatBatchMode(self): + portal_skins = self.getSkinsTool() + portal_skins.custom.REQUEST.RESPONSE.setHeader('content-type', 'text/html') + ERP5Site_viewNothingAsOdt = self.getPortal().ERP5Site_viewNothingAsOdt + ERP5Site_viewNothingAsOdt(batch_mode=1) + self.assertEqual('text/html', portal_skins.custom.REQUEST.RESPONSE.getHeader('content-type').split(';')[0]) + + def test_03_excPdfFormatNoBatchMode(self): + portal_skins = self.getSkinsTool() + portal_skins.custom.REQUEST.RESPONSE.setHeader('content-type', 'text/html') + ERP5Site_viewNothingAsOdt = self.getPortal().ERP5Site_viewNothingAsOdt + self.assertRaises(ConversionError, ERP5Site_viewNothingAsOdt, batch_mode=0, format='pdf') + self.assertEqual('text/html', portal_skins.custom.REQUEST.RESPONSE.getHeader('content-type').split(';')[0]) + + def test_04_excPdfFormatBatchMode(self): + portal_skins = self.getSkinsTool() + portal_skins.custom.REQUEST.RESPONSE.setHeader('content-type', 'text/html') + ERP5Site_viewNothingAsOdt = self.getPortal().ERP5Site_viewNothingAsOdt + self.assertRaises(ConversionError, ERP5Site_viewNothingAsOdt, batch_mode=1, format='pdf') + self.assertEqual('text/html', portal_skins.custom.REQUEST.RESPONSE.getHeader('content-type').split(';')[0]) + +if __name__ == '__main__': + framework() +else: + import unittest + def test_suite(): + suite = unittest.TestSuite() + suite.addTest(unittest.makeSuite(TestOoodResponse)) + return suite + -- 2.30.9