Switched to jinja
bzr revid: nicolas.vanhoren@openerp.com-20130226135917-vkxa2gaxyxy1v7b0
This commit is contained in:
parent
63346192fc
commit
49b1fa4b52
|
@ -55,7 +55,7 @@
|
||||||
<body style="border:0; margin: 0;" onload="subst()">
|
<body style="border:0; margin: 0;" onload="subst()">
|
||||||
<table class="header" style="border-bottom: 0px solid black; width: 100%">
|
<table class="header" style="border-bottom: 0px solid black; width: 100%">
|
||||||
<tr>
|
<tr>
|
||||||
<td>${helper.embed_company_logo()|n}</td>
|
<td>${helper.embed_company_logo()|safe}</td>
|
||||||
<td style="text-align:right"> </td>
|
<td style="text-align:right"> </td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
@ -63,21 +63,21 @@
|
||||||
<td style="text-align:right"> </td>
|
<td style="text-align:right"> </td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>${company.partner_id.name |entity}</td>
|
<td>${company.partner_id.name}</td>
|
||||||
<td/>
|
<td/>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td >${company.partner_id.street or ''|entity}</td>
|
<td >${company.partner_id.street or ''}</td>
|
||||||
<td/>
|
<td/>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Phone: ${company.partner_id.phone or ''|entity} </td>
|
<td>Phone: ${company.partner_id.phone or ''} </td>
|
||||||
<td/>
|
<td/>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Mail: ${company.partner_id.email or ''|entity}<br/></td>
|
<td>Mail: ${company.partner_id.email or ''}<br/></td>
|
||||||
</tr>
|
</tr>
|
||||||
</table> ${_debug or ''|n} </body>
|
</table> ${_debug or ''|safe} </body>
|
||||||
</html>]]>
|
</html>]]>
|
||||||
</field>
|
</field>
|
||||||
<field eval="55.0" name="margin_top"/>
|
<field eval="55.0" name="margin_top"/>
|
||||||
|
|
|
@ -38,10 +38,6 @@ import tempfile
|
||||||
import time
|
import time
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
from mako.template import Template
|
|
||||||
from mako.lookup import TemplateLookup
|
|
||||||
from mako import exceptions
|
|
||||||
|
|
||||||
from openerp import netsvc
|
from openerp import netsvc
|
||||||
from openerp import pooler
|
from openerp import pooler
|
||||||
from report_helper import WebKitHelper
|
from report_helper import WebKitHelper
|
||||||
|
@ -50,16 +46,46 @@ from openerp import addons
|
||||||
from openerp import tools
|
from openerp import tools
|
||||||
from openerp.tools.translate import _
|
from openerp.tools.translate import _
|
||||||
from openerp.osv.osv import except_osv
|
from openerp.osv.osv import except_osv
|
||||||
|
from urllib import urlencode, quote as quote
|
||||||
|
|
||||||
_logger = logging.getLogger(__name__)
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
try:
|
||||||
|
# We use a jinja2 sandboxed environment to render mako templates.
|
||||||
|
# Note that the rendering does not cover all the mako syntax, in particular
|
||||||
|
# arbitrary Python statements are not accepted, and not all expressions are
|
||||||
|
# allowed: only "public" attributes (not starting with '_') of objects may
|
||||||
|
# be accessed.
|
||||||
|
# This is done on purpose: it prevents incidental or malicious execution of
|
||||||
|
# Python code that may break the security of the server.
|
||||||
|
from jinja2.sandbox import SandboxedEnvironment
|
||||||
|
mako_template_env = SandboxedEnvironment(
|
||||||
|
block_start_string="<%",
|
||||||
|
block_end_string="%>",
|
||||||
|
variable_start_string="${",
|
||||||
|
variable_end_string="}",
|
||||||
|
comment_start_string="<%doc>",
|
||||||
|
comment_end_string="</%doc>",
|
||||||
|
line_statement_prefix="%",
|
||||||
|
line_comment_prefix="##",
|
||||||
|
trim_blocks=True, # do not output newline after blocks
|
||||||
|
autoescape=True, # XML/HTML automatic escaping
|
||||||
|
)
|
||||||
|
mako_template_env.globals.update({
|
||||||
|
'str': str,
|
||||||
|
'quote': quote,
|
||||||
|
'urlencode': urlencode,
|
||||||
|
})
|
||||||
|
except ImportError:
|
||||||
|
_logger.warning("jinja2 not available, templating features will not work!")
|
||||||
|
|
||||||
def mako_template(text):
|
def mako_template(text):
|
||||||
"""Build a Mako template.
|
"""Build a Mako template.
|
||||||
|
|
||||||
This template uses UTF-8 encoding
|
This template uses UTF-8 encoding
|
||||||
"""
|
"""
|
||||||
tmp_lookup = TemplateLookup() #we need it in order to allow inclusion and inheritance
|
|
||||||
return Template(text, input_encoding='utf-8', output_encoding='utf-8', lookup=tmp_lookup)
|
return mako_template_env.from_string(text)
|
||||||
|
|
||||||
class WebKitParser(report_sxw):
|
class WebKitParser(report_sxw):
|
||||||
"""Custom class that use webkit to render HTML reports
|
"""Custom class that use webkit to render HTML reports
|
||||||
|
@ -242,64 +268,62 @@ class WebKitParser(report_sxw):
|
||||||
if not css :
|
if not css :
|
||||||
css = ''
|
css = ''
|
||||||
|
|
||||||
#default_filters=['unicode', 'entity'] can be used to set global filter
|
|
||||||
body_mako_tpl = mako_template(template)
|
body_mako_tpl = mako_template(template)
|
||||||
helper = WebKitHelper(cursor, uid, report_xml.id, context)
|
helper = WebKitHelper(cursor, uid, report_xml.id, context)
|
||||||
if report_xml.precise_mode:
|
if report_xml.precise_mode:
|
||||||
for obj in objs:
|
for obj in objs:
|
||||||
self.parser_instance.localcontext['objects'] = [obj]
|
self.parser_instance.localcontext['objects'] = [obj]
|
||||||
try :
|
try :
|
||||||
html = body_mako_tpl.render(helper=helper,
|
html = body_mako_tpl.render(dict({"helper":helper,
|
||||||
css=css,
|
"css":css,
|
||||||
_=self.translate_call,
|
"_":self.translate_call},
|
||||||
**self.parser_instance.localcontext)
|
**self.parser_instance.localcontext))
|
||||||
htmls.append(html)
|
htmls.append(html)
|
||||||
except Exception:
|
except Exception, e:
|
||||||
msg = exceptions.text_error_template().render()
|
msg = u"%s" % e
|
||||||
_logger.error(msg)
|
_logger.error(msg)
|
||||||
raise except_osv(_('Webkit render!'), msg)
|
raise except_osv(_('Webkit render!'), msg)
|
||||||
else:
|
else:
|
||||||
try :
|
try :
|
||||||
html = body_mako_tpl.render(helper=helper,
|
html = body_mako_tpl.render(dict({"helper":helper,
|
||||||
css=css,
|
"css":css,
|
||||||
_=self.translate_call,
|
"_":self.translate_call},
|
||||||
**self.parser_instance.localcontext)
|
**self.parser_instance.localcontext))
|
||||||
htmls.append(html)
|
htmls.append(html)
|
||||||
except Exception:
|
except Exception:
|
||||||
msg = exceptions.text_error_template().render()
|
msg = u"%s" % e
|
||||||
_logger.error(msg)
|
_logger.error(msg)
|
||||||
raise except_osv(_('Webkit render!'), msg)
|
raise except_osv(_('Webkit render!'), msg)
|
||||||
head_mako_tpl = mako_template(header)
|
head_mako_tpl = mako_template(header)
|
||||||
try :
|
try :
|
||||||
head = head_mako_tpl.render(helper=helper,
|
head = head_mako_tpl.render(dict({"helper":helper,
|
||||||
css=css,
|
"css":css,
|
||||||
_=self.translate_call,
|
"_":self.translate_call,
|
||||||
_debug=False,
|
"_debug":False},
|
||||||
**self.parser_instance.localcontext)
|
**self.parser_instance.localcontext))
|
||||||
except Exception:
|
except Exception, e:
|
||||||
raise except_osv(_('Webkit render!'),
|
raise except_osv(_('Webkit render!'), u"%s" % e)
|
||||||
exceptions.text_error_template().render())
|
|
||||||
foot = False
|
foot = False
|
||||||
if footer :
|
if footer :
|
||||||
foot_mako_tpl = mako_template(footer)
|
foot_mako_tpl = mako_template(footer)
|
||||||
try :
|
try :
|
||||||
foot = foot_mako_tpl.render(helper=helper,
|
foot = foot_mako_tpl.render(dict({"helper":helper,
|
||||||
css=css,
|
"css":css,
|
||||||
_=self.translate_call,
|
"_":self.translate_call},
|
||||||
**self.parser_instance.localcontext)
|
**self.parser_instance.localcontext))
|
||||||
except:
|
except Exception, e:
|
||||||
msg = exceptions.text_error_template().render()
|
msg = u"%s" % e
|
||||||
_logger.error(msg)
|
_logger.error(msg)
|
||||||
raise except_osv(_('Webkit render!'), msg)
|
raise except_osv(_('Webkit render!'), msg)
|
||||||
if report_xml.webkit_debug :
|
if report_xml.webkit_debug :
|
||||||
try :
|
try :
|
||||||
deb = head_mako_tpl.render(helper=helper,
|
deb = head_mako_tpl.render(dict({"helper":helper,
|
||||||
css=css,
|
"css":css,
|
||||||
_debug=tools.ustr("\n".join(htmls)),
|
"_":self.translate_call,
|
||||||
_=self.translate_call,
|
"_debug":tools.ustr("\n".join(htmls))},
|
||||||
**self.parser_instance.localcontext)
|
**self.parser_instance.localcontext))
|
||||||
except Exception:
|
except Exception, e:
|
||||||
msg = exceptions.text_error_template().render()
|
msg = u"%s" % e
|
||||||
_logger.error(msg)
|
_logger.error(msg)
|
||||||
raise except_osv(_('Webkit render!'), msg)
|
raise except_osv(_('Webkit render!'), msg)
|
||||||
return (deb, 'html')
|
return (deb, 'html')
|
||||||
|
|
Loading…
Reference in New Issue