# -*- coding: utf-8 -*- ############################################################################## # # OpenERP, Open Source Management Solution # Copyright (C) 2004-2009 Tiny SPRL (). # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as # published by the Free Software Foundation, either version 3 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # ############################################################################## import mako from lxml import etree from mako.template import Template from mako.lookup import TemplateLookup import openerp.netsvc as netsvc import traceback, sys, os class makohtml2html(object): def __init__(self, html, localcontext): self.localcontext = localcontext self.html = html def format_header(self, html): head = html.findall('head') header = '' for node in head: header += etree.tostring(node) return header def format_footer(self, footer): html_footer = '' for node in footer[0].getchildren(): html_footer += etree.tostring(node) return html_footer def format_body(self, html): body = html.findall('body') body_list = [] footer = self.format_footer(body[-1].getchildren()) for b in body[:-1]: body_list.append(etree.tostring(b).replace('\t', '').replace('\n','')) html_body ='''
%s
%s

%s / %s
'''%(body_list,body_list[0],footer,'1',len(body_list)) return html_body def render(self): path = os.path.realpath('addons/base/report') temp_lookup = TemplateLookup(directories=[path],output_encoding='utf-8', encoding_errors='replace') template = Template(self.html, lookup=temp_lookup) self.localcontext.update({'css_path':path}) final_html =''' ''' try: html = template.render_unicode(**self.localcontext) etree_obj = etree.HTML(html) final_html += self.format_header(etree_obj) final_html += self.format_body(etree_obj) return final_html except Exception,e: tb_s = reduce(lambda x, y: x+y, traceback.format_exception(sys.exc_type, sys.exc_value, sys.exc_traceback)) netsvc.Logger().notifyChannel('report', netsvc.LOG_ERROR, 'report :\n%s\n%s\n' % (tb_s, str(e))) def parseNode(html, localcontext = {}): r = makohtml2html(html, localcontext) return r.render() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: