[Erp5-report] r11251 - /erp5/trunk/products/ERP5OOo/OOoTemplate.py

nobody at svn.erp5.org nobody at svn.erp5.org
Fri Nov 10 17:27:01 CET 2006


Author: bartek
Date: Fri Nov 10 17:26:57 2006
New Revision: 11251

URL: http://svn.erp5.org?rev=11251&view=rev
Log:
direct convertion into (almost) any format (TODO: proper handling of zipped html)

Modified:
    erp5/trunk/products/ERP5OOo/OOoTemplate.py

Modified: erp5/trunk/products/ERP5OOo/OOoTemplate.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5OOo/OOoTemplate.py?rev=11251&r1=11250&r2=11251&view=diff
==============================================================================
--- erp5/trunk/products/ERP5OOo/OOoTemplate.py (original)
+++ erp5/trunk/products/ERP5OOo/OOoTemplate.py Fri Nov 10 17:26:57 2006
@@ -47,6 +47,7 @@
     from StringIO import StringIO
 import re
 import itertools
+import xmlrpclib
 
 from zLOG import LOG
 
@@ -456,8 +457,8 @@
       opts = extra_context.get("options", None)
       if opts is not None:
         format=opts.get("format",None)
-        if format == "pdf":
-          return self._asPdf(ooo, request)
+        if format is not None:
+          return self._asFormat(ooo, format, request)
 
       # Do not send a RESPONSE if in batch_mode
       if request and not batch_mode:
@@ -484,6 +485,9 @@
         """
         Return OOo report as pdf
         """
+        return self._asFormat(ooo,'pdf',REQUEST)
+    
+    def _asFormat(self,ooo,format,REQUEST=None):
         # now create a temp OOoDocument to convert data to pdf
         from Products.ERP5Type.Document import newTempOOoDocument
         tmp_ooo = newTempOOoDocument(self, self.title_or_id())
@@ -492,17 +496,32 @@
                      source_reference = self.title_or_id(),
                      content_type = self.content_type,)
         tmp_ooo.oo_data = ooo
-        # now convert it to pdf
-        tgts=[x[1] for x in tmp_ooo.getTargetFormatItemList() if x[1].endswith('pdf')]
-        if len(tgts)>1:
-            return tmp_ooo.returnMessage('multiple pdf formats found - this shouldnt happen')
-        if len(tgts)==0:
-            return tmp_ooo.returnMessage('no pdf format found')
-        fmt=tgts[0]
-        mime, data = tmp_ooo._makeFile(fmt)
+        if format == 'pdf':
+          # 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:
+              return tmp_ooo.returnMessage('multiple pdf formats found - this shouldnt happen')
+          if len(tgts)==0:
+              return tmp_ooo.returnMessage('no pdf format found')
+          fmt=tgts[0]
+          mime, data = tmp_ooo._makeFile(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())
+          return data
+        # now for other formats
+        if not tmp_ooo.isAllowed(format):
+          errstr='%s format is not supported' % format
+          return tmp_ooo.returnMessage(errstr)
+        try:
+          mime,data=tmp_ooo._makeFile(format)
+        except xmlrpclib.Fault,e:
+          return tmp_ooo.returnMessage('Problem: %s' % str(e))
         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', 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
         return data
 
 InitializeClass(OOoTemplate)
@@ -520,3 +539,5 @@
 registerFileExtension('ooot', FSOOoTemplate)
 registerMetaType(OOoTemplate.meta_type, FSOOoTemplate)
 
+
+# vim: syntax=python shiftwidth=2 




More information about the Erp5-report mailing list