# -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. import logging import os import mako from mako.lookup import TemplateLookup from mako.template import Template from lxml import etree _logger = logging.getLogger(__name__) 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: _logger.exception('report :') def parseNode(html, localcontext = {}): r = makohtml2html(html, localcontext) return r.render()