[Erp5-report] r25331 - /erp5/trunk/products/ERP5Form/PDFTemplate.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Wed Jan 28 14:33:10 CET 2009
Author: jerome
Date: Wed Jan 28 14:33:06 2009
New Revision: 25331
URL: http://svn.erp5.org?rev=25331&view=rev
Log:
Support the case where CMFReportTool is not installed.
In this case PDFTemplates will not work, but it does not prevent zope startup.
Modified:
erp5/trunk/products/ERP5Form/PDFTemplate.py
Modified: erp5/trunk/products/ERP5Form/PDFTemplate.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Form/PDFTemplate.py?rev=25331&r1=25330&r2=25331&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Form/PDFTemplate.py [utf8] (original)
+++ erp5/trunk/products/ERP5Form/PDFTemplate.py [utf8] Wed Jan 28 14:33:06 2009
@@ -203,143 +203,149 @@
registerMetaType('ERP5 PDF Template', FSPDFTemplate)
# Dynamic Patch
-from Products.CMFReportTool.ReportTool import ReportTool
try:
- from Products.CMFReportTool.ReportTool import ZODBResourceHandler
- HAS_ZODB_RESOURCE_HANDLER=1
+ from Products.CMFReportTool.ReportTool import ReportTool
except ImportError:
- from Products.CMFReportTool.ReportTool import ZODBHandler, ResourceHandler
- HAS_ZODB_RESOURCE_HANDLER=0
-
-from Products.CMFReportTool.RenderPDF.Parser import TemplateParser,DocumentParser
-
-try:
- # Zope 2.10 and later.
- from Products.PageTemplates.Expressions import boboAwareZopeTraverse
-except ImportError:
- # Zope 2.9 and earlier.
- boboAwareZopeTraverse = None
- from Products.PageTemplates.Expressions import restrictedTraverse
-
-from StringIO import StringIO
-import xml.dom.minidom
-import urllib,os.path
-
-
-if HAS_ZODB_RESOURCE_HANDLER:
- class ERP5ResourceHandler(ZODBResourceHandler):
- ''' Wrapper for ZODB Resources and files'''
-
- def handleZODB(self,path):
-
- path = path.split('/')
- if boboAwareZopeTraverse is None:
- obj = restrictedTraverse(self.context,path,getSecurityManager())
- else:
- # XXX only the request should be required, but this looks ad-hoc..
- econtext = dict(request=self.context.REQUEST)
- obj = boboAwareZopeTraverse(self.context, path, econtext)
-
-
- # check type and e.g. call object if script ...
- if callable(obj):
- try:
- obj = obj()
- except (ConflictError, RuntimeError):
- raise
- except:
- pass
-
- ## for OFS.Image-like objects
- if hasattr(obj,'_original'):
- obj = obj._original._data()
- elif hasattr(obj,'_data'):
- obj = obj._data
- elif hasattr(obj,'data'):
- obj = obj.data
-
- return StringIO(str(obj))
-else:
- class ERP5ResourceHandler(ResourceHandler):
- ''' Wrapper for ZODB Resources and files'''
- def __init__(self, context=None, resource_path=None):
- zodbhandler = ERP5ZODBHandler(context)
- self.opener = urllib2.build_opener(zodbhandler)
-
- class ERP5ZODBHandler(ZODBHandler):
- def zodb_open(self, req):
- path = req.get_selector()
- path = path.split('/')
- if boboAwareZopeTraverse is None:
- obj = restrictedTraverse(self.context,path,getSecurityManager())
- else:
- # XXX only the request should be required, but this looks ad-hoc..
- econtext = dict(request=self.context.REQUEST)
- obj = boboAwareZopeTraverse(self.context, path, econtext)
-
- # check type and e.g. call object if script ...
- if callable(obj):
- try:
- obj = obj()
- except (ConflictError, RuntimeError):
- raise
- except:
- pass
-
- ## for OFS.Image-like objects
- if hasattr(obj,'_original'):
- obj = obj._original._data()
- elif hasattr(obj,'_data'):
- obj = obj._data
- elif hasattr(obj,'data'):
- obj = obj.data
-
- return StringIO(str(obj))
-
-
-
-def ReportTool_renderPDF(self, templatename, document_xml, *args, **kwargs):
- """
- Render document using template
- """
-
- context = kwargs.get('context',None)
- if context is None:
- context = self
-
- encoding = kwargs.get('encoding') or 'UTF-8'
- #LOG('ReportTool_renderPDF', 0, 'encoding = %r' % encoding)
- rhandler = ERP5ResourceHandler(context, getattr(self, 'resourcePath', None))
-
- # if zope gives us the xml in unicode
- # we need to encode it before it can be parsed
- template_xml = getattr(context, templatename)(*args, **kwargs)
- if type(template_xml) is type(u''):
- template_xml = self._encode(template_xml, encoding)
- if type(document_xml) is type(u''):
- document_xml = self._encode(document_xml, encoding)
- #LOG('ReportTool_renderPDF', 0, 'template_xml = %r, document_xml = %r' % (template_xml, document_xml))
-
- # XXXXX Because reportlab does not support UTF-8, use Latin-1. What a mess.
- template_xml = unicode(template_xml,encoding).encode('iso-8859-1')
- document_xml = unicode(document_xml,encoding).encode('iso-8859-1','replace')
- encoding = 'iso-8859-1'
-
- # create the PDFTemplate from xml
- template_dom = xml.dom.minidom.parseString(template_xml)
- template_dom.encoding = encoding
- template = TemplateParser(template_dom,encoding,resourceHandler=rhandler)()
-
- # create the PDFDocment from xml
- document_dom = xml.dom.minidom.parseString(document_xml)
- document_dom.encoding = encoding
- document = DocumentParser(document_dom,encoding,resourceHandler=rhandler)
-
- # create the PDF itself using the document and the template
- buf = StringIO()
- document(template,buf)
- buf.seek(0)
- return buf.read()
-
-
-ReportTool.renderPDF = ReportTool_renderPDF
+ ReportTool = None
+
+
+if ReportTool:
+ try:
+ from Products.CMFReportTool.ReportTool import ZODBResourceHandler
+ HAS_ZODB_RESOURCE_HANDLER=1
+ except ImportError:
+ from Products.CMFReportTool.ReportTool import ZODBHandler, ResourceHandler
+ HAS_ZODB_RESOURCE_HANDLER=0
+
+ from Products.CMFReportTool.RenderPDF.Parser import TemplateParser,DocumentParser
+
+ try:
+ # Zope 2.10 and later.
+ from Products.PageTemplates.Expressions import boboAwareZopeTraverse
+ except ImportError:
+ # Zope 2.9 and earlier.
+ boboAwareZopeTraverse = None
+ from Products.PageTemplates.Expressions import restrictedTraverse
+
+ from StringIO import StringIO
+ import xml.dom.minidom
+ import urllib,os.path
+
+
+ if HAS_ZODB_RESOURCE_HANDLER:
+ class ERP5ResourceHandler(ZODBResourceHandler):
+ ''' Wrapper for ZODB Resources and files'''
+
+ def handleZODB(self,path):
+
+ path = path.split('/')
+ if boboAwareZopeTraverse is None:
+ obj = restrictedTraverse(self.context,path,getSecurityManager())
+ else:
+ # XXX only the request should be required, but this looks ad-hoc..
+ econtext = dict(request=self.context.REQUEST)
+ obj = boboAwareZopeTraverse(self.context, path, econtext)
+
+
+ # check type and e.g. call object if script ...
+ if callable(obj):
+ try:
+ obj = obj()
+ except (ConflictError, RuntimeError):
+ raise
+ except:
+ pass
+
+ ## for OFS.Image-like objects
+ if hasattr(obj,'_original'):
+ obj = obj._original._data()
+ elif hasattr(obj,'_data'):
+ obj = obj._data
+ elif hasattr(obj,'data'):
+ obj = obj.data
+
+ return StringIO(str(obj))
+ else:
+ class ERP5ResourceHandler(ResourceHandler):
+ ''' Wrapper for ZODB Resources and files'''
+ def __init__(self, context=None, resource_path=None):
+ zodbhandler = ERP5ZODBHandler(context)
+ self.opener = urllib2.build_opener(zodbhandler)
+
+ class ERP5ZODBHandler(ZODBHandler):
+ def zodb_open(self, req):
+ path = req.get_selector()
+ path = path.split('/')
+ if boboAwareZopeTraverse is None:
+ obj = restrictedTraverse(self.context,path,getSecurityManager())
+ else:
+ # XXX only the request should be required, but this looks ad-hoc..
+ econtext = dict(request=self.context.REQUEST)
+ obj = boboAwareZopeTraverse(self.context, path, econtext)
+
+ # check type and e.g. call object if script ...
+ if callable(obj):
+ try:
+ obj = obj()
+ except (ConflictError, RuntimeError):
+ raise
+ except:
+ pass
+
+ ## for OFS.Image-like objects
+ if hasattr(obj,'_original'):
+ obj = obj._original._data()
+ elif hasattr(obj,'_data'):
+ obj = obj._data
+ elif hasattr(obj,'data'):
+ obj = obj.data
+
+ return StringIO(str(obj))
+
+
+
+ def ReportTool_renderPDF(self, templatename, document_xml, *args, **kwargs):
+ """
+ Render document using template
+ """
+
+ context = kwargs.get('context',None)
+ if context is None:
+ context = self
+
+ encoding = kwargs.get('encoding') or 'UTF-8'
+ #LOG('ReportTool_renderPDF', 0, 'encoding = %r' % encoding)
+ rhandler = ERP5ResourceHandler(context, getattr(self, 'resourcePath', None))
+
+ # if zope gives us the xml in unicode
+ # we need to encode it before it can be parsed
+ template_xml = getattr(context, templatename)(*args, **kwargs)
+ if type(template_xml) is type(u''):
+ template_xml = self._encode(template_xml, encoding)
+ if type(document_xml) is type(u''):
+ document_xml = self._encode(document_xml, encoding)
+ #LOG('ReportTool_renderPDF', 0, 'template_xml = %r, document_xml = %r' % (template_xml, document_xml))
+
+ # XXXXX Because reportlab does not support UTF-8, use Latin-1. What a mess.
+ template_xml = unicode(template_xml,encoding).encode('iso-8859-1')
+ document_xml = unicode(document_xml,encoding).encode('iso-8859-1','replace')
+ encoding = 'iso-8859-1'
+
+ # create the PDFTemplate from xml
+ template_dom = xml.dom.minidom.parseString(template_xml)
+ template_dom.encoding = encoding
+ template = TemplateParser(template_dom,encoding,resourceHandler=rhandler)()
+
+ # create the PDFDocment from xml
+ document_dom = xml.dom.minidom.parseString(document_xml)
+ document_dom.encoding = encoding
+ document = DocumentParser(document_dom,encoding,resourceHandler=rhandler)
+
+ # create the PDF itself using the document and the template
+ buf = StringIO()
+ document(template,buf)
+ buf.seek(0)
+ return buf.read()
+
+
+ ReportTool.renderPDF = ReportTool_renderPDF
More information about the Erp5-report
mailing list