diff --git a/openerp/addons/base/ir/ir_qweb.py b/openerp/addons/base/ir/ir_qweb.py index b776cf83702..1958573fd79 100644 --- a/openerp/addons/base/ir/ir_qweb.py +++ b/openerp/addons/base/ir/ir_qweb.py @@ -58,10 +58,14 @@ class QWebException(Exception): #SAFE = ["_name"] class QWebContext(dict): - def __init__(self, data, undefined_handler=None, loader=None, templates=None): + def __init__(self, cr, uid, data, undefined_handler=None, loader=None, + templates=None, context=None): + self.cr = cr + self.uid = uid self.loader = loader self.undefined_handler = undefined_handler self.templates = templates or {} + self.context = context dic = BUILTINS.copy() dic.update(data) super(QWebContext, self).__init__(dic) @@ -97,10 +101,11 @@ class QWebContext(dict): return eval(expr, None, self) def copy(self): - return QWebContext(dict.copy(self), + return QWebContext(self.cr, self.uid, dict.copy(self), undefined_handler=self.undefined_handler, loader=self.loader, - templates=self.templates) + templates=self.templates, + context=self.context) def __copy__(self): return self.copy() @@ -235,11 +240,13 @@ class QWeb(orm.AbstractModel): else: return 0 - def render(self, tname, v=None, out=None, loader=None, undefined_handler=None): + def render(self, cr, uid, tname, v=None, loader=None, + undefined_handler=None, context=None): if v is None: v = {} if not isinstance(v, QWebContext): - v = QWebContext(v, undefined_handler=undefined_handler, loader=loader) + v = QWebContext(cr, uid, v, undefined_handler=undefined_handler, + loader=loader, context=context) v['__template__'] = tname stack = v.get('__stack__', []) if stack: @@ -448,8 +455,8 @@ class QWeb(orm.AbstractModel): converter = self.get_converter_for(field_type) - return converter.to_html(record._cr, record._uid, field_name, record, options, - e, t_att, g_att, v) + return converter.to_html(v.cr, v.uid, field_name, record, options, + e, t_att, g_att, v, context=v.context) def get_converter_for(self, field_type): return self.pool.get('ir.qweb.field.' + field_type, @@ -511,7 +518,7 @@ class FieldConverter(osv.AbstractModel): cr, uid, record[field_name], column, options=None) def to_html(self, cr, uid, field_name, record, options, - source_element, t_att, g_att, qweb_context): + source_element, t_att, g_att, qweb_context, context=None): """ Converts a ``t-field`` to its HTML output. A ``t-field`` may be extended by a ``t-field-options``, which is a JSON-serialized mapping of configuration values. diff --git a/openerp/addons/base/ir/ir_ui_view.py b/openerp/addons/base/ir/ir_ui_view.py index 050f98b55e0..5876d211380 100644 --- a/openerp/addons/base/ir/ir_ui_view.py +++ b/openerp/addons/base/ir/ir_ui_view.py @@ -786,8 +786,9 @@ class view(osv.osv): return self.read_template(cr, uid, name, context=context) return self.pool[engine].render( - id_or_xml_id, values, - loader=loader, undefined_handler=lambda key, v: None) + cr, uid, id_or_xml_id, values, + loader=loader, undefined_handler=lambda key, v: None, + context=context) # maybe used to print the workflow ? diff --git a/openerp/tests/addons/test_converter/tests/test_html.py b/openerp/tests/addons/test_converter/tests/test_html.py index d433c814958..d07ea62a2a6 100644 --- a/openerp/tests/addons/test_converter/tests/test_html.py +++ b/openerp/tests/addons/test_converter/tests/test_html.py @@ -98,7 +98,7 @@ class TestCurrencyExport(TestExport): self.cr, self.uid, 'value', obj, options, doc.createElement('span'), {'field': 'obj.value', 'field-options': json.dumps(options)}, - '', ir_qweb.QWebContext({'obj': obj, 'c2': dest, })) + '', ir_qweb.QWebContext(self.cr, self.uid, {'obj': obj, 'c2': dest, })) return converted def test_currency_post(self): diff --git a/openerp/tests/test_qweb.py b/openerp/tests/test_qweb.py index 662946c175e..a29f91195b7 100644 --- a/openerp/tests/test_qweb.py +++ b/openerp/tests/test_qweb.py @@ -24,9 +24,10 @@ class TestQWebTField(common.TransactionCase): }) root_company = Companies.browse(self.cr, self.uid, company_id) - result = self.engine.render_node(field, ir_qweb.QWebContext({ - 'company': root_company, - })) + result = self.engine.render_node(field, ir_qweb.QWebContext( + self.cr, self.uid, { + 'company': root_company, + })) self.assertEqual( result, @@ -47,9 +48,10 @@ class TestQWebTField(common.TransactionCase): }) root_company = Companies.browse(self.cr, self.uid, company_id) - result = self.engine.render_node(field, ir_qweb.QWebContext({ - 'company': root_company, - })) + result = self.engine.render_node(field, ir_qweb.QWebContext( + self.cr, self.uid, { + 'company': root_company, + })) self.assertEqual( result, '