- if cursor is None: # TODO temporary, while refactoring
- registered_report = openerp.report.interface.report_int._reports[name]
- print ">>> Oh noes no cursor."
- return registered_report
- else:
- from openerp.report.report_sxw import report_sxw, report_rml
- cr = cursor
- opj = os.path.join
- cr.execute("SELECT * FROM ir_act_report_xml WHERE report_name=%s", (name[len('report.'):],))
- result = cr.dictfetchall()
- for r in result:
- if r['report_rml'] or r['report_rml_content_data']:
- if r['parser']:
- kwargs = { 'parser': operator.attrgetter(r['parser'])(openerp.addons) }
- else:
- kwargs = {}
- new_report = report_sxw('report.'+r['report_name'], r['model'],
- opj('addons',r['report_rml'] or '/'), header=r['header'], register=False, **kwargs)
- elif r['report_xsl']:
- new_report = report_rml('report.'+r['report_name'], r['model'],
- opj('addons',r['report_xml']),
- r['report_xsl'] and opj('addons',r['report_xsl']), register=False)
- else:
- raise Exception, "Unhandled report type: %s" % r
- return new_report
+ if name.startswith('report.'):
+ report = openerp.report.interface.report_int._reports.get(name)
+ if report:
+ return report
+ else:
+ dbname = getattr(threading.currentThread(), 'dbname', None)
+ if dbname:
+ registry = openerp.modules.registry.RegistryManager.get(dbname)
+ with registry.cursor() as cr:
+ return registry['ir.actions.report.xml']._lookup_report(cr, name[len('report.'):])