def _lookup_report(self, name): """ Look up a report definition. """ import operator import os opj = os.path.join # First lookup in the deprecated place, because if the report definition # has not been updated, it is more likely the correct definition is there. # Only reports with custom parser specified in Python are still there. if 'report.' + name in odoo.report.interface.report_int._reports: new_report = odoo.report.interface.report_int._reports['report.' + name] if not isinstance(new_report, WebKitParser): new_report = None else: self.env.cr.execute("SELECT * FROM ir_act_report_xml WHERE report_name=%s and report_type=%s", (name, 'webkit')) r = self.env.cr.dictfetchone() if r: if r['parser']: parser = operator.attrgetter(r['parser'])(odoo.addons) kwargs = {'parser': parser} else: kwargs = {} new_report = WebKitParser('report.' + r['report_name'], r['model'], opj('addons', r['report_rml'] or '/'), header=r['header'], register=False, **kwargs) else: new_report = None if new_report: return new_report else: return super(IrActionsReportXml, self)._lookup_report(name)
def register_report(name, model, tmpl_path, parser=rml_parse): """Register the report into the services""" name = 'report.%s' % name if netsvc.Service._services.get(name, False): service = netsvc.Service._services[name] if isinstance(service, WebKitParser): #already instantiated properly, skip it return if hasattr(service, 'parser'): parser = service.parser del netsvc.Service._services[name] WebKitParser(name, model, tmpl_path, parser=parser)