summaryrefslogtreecommitdiff
path: root/odoo/addons
diff options
context:
space:
mode:
authorMartin Trigaux <mat@odoo.com>2020-02-14 11:22:15 +0100
committerMartin Trigaux <mat@odoo.com>2020-05-14 13:59:10 +0200
commitd9287caf9408bb4ff85ad734cbca08e44321e205 (patch)
tree0d3b7c5705e5172176a7d76bf9098e381190bf4b /odoo/addons
parent56a8c9e4311d24c33b7ad08b8230e4be345a85b8 (diff)
[IMP] *: convert to private methods
render, render_template, load, activity_schedule_with_view, get_website_pages should all be private: It should not be possible to render an aribtrary template only with its name or id Still need to render some qweb views from js so the method render_template is kept public. This explains why the website editor still need read access on ir.ui.view as we want to allow any snippet to be rendered.
Diffstat (limited to 'odoo/addons')
-rw-r--r--odoo/addons/base/models/ir_actions_report.py30
-rw-r--r--odoo/addons/base/models/ir_qweb.py13
-rw-r--r--odoo/addons/base/models/ir_qweb_fields.py4
-rw-r--r--odoo/addons/base/models/ir_ui_view.py18
-rw-r--r--odoo/addons/base/models/qweb.py6
-rw-r--r--odoo/addons/base/tests/test_qweb.py50
-rw-r--r--odoo/addons/base/tests/test_reports.py2
-rw-r--r--odoo/addons/base/tests/test_views.py16
-rw-r--r--odoo/addons/base/wizard/base_document_layout.py2
-rw-r--r--odoo/addons/test_assetsbundle/controllers/main.py2
-rw-r--r--odoo/addons/test_assetsbundle/tests/test_assetsbundle.py4
11 files changed, 79 insertions, 68 deletions
diff --git a/odoo/addons/base/models/ir_actions_report.py b/odoo/addons/base/models/ir_actions_report.py
index 1cc1380d9da..fd4cca16947 100644
--- a/odoo/addons/base/models/ir_actions_report.py
+++ b/odoo/addons/base/models/ir_actions_report.py
@@ -370,7 +370,7 @@ class IrActionsReport(models.Model):
# set context language to body language
if node.get('data-oe-lang'):
layout_with_lang = layout_with_lang.with_context(lang=node.get('data-oe-lang'))
- body = layout_with_lang.render(dict(subst=False, body=lxml.html.tostring(node), base_url=base_url))
+ body = layout_with_lang._render(dict(subst=False, body=lxml.html.tostring(node), base_url=base_url))
bodies.append(body)
if node.get('data-oe-model') == self.model:
res_ids.append(int(node.get('data-oe-id', 0)))
@@ -388,8 +388,8 @@ class IrActionsReport(models.Model):
if attribute[0].startswith('data-report-'):
specific_paperformat_args[attribute[0]] = attribute[1]
- header = layout.render(dict(subst=True, body=lxml.html.tostring(header_node), base_url=base_url))
- footer = layout.render(dict(subst=True, body=lxml.html.tostring(footer_node), base_url=base_url))
+ header = layout._render(dict(subst=True, body=lxml.html.tostring(header_node), base_url=base_url))
+ footer = layout._render(dict(subst=True, body=lxml.html.tostring(footer_node), base_url=base_url))
return bodies, res_ids, header, footer, specific_paperformat_args
@@ -533,7 +533,7 @@ class IrActionsReport(models.Model):
"""
return {}
- def render_template(self, template, values=None):
+ def _render_template(self, template, values=None):
"""Allow to render a QWeb template python-side. This function returns the 'ir.ui.view'
render but embellish it with some variables/methods used in reports.
:param values: additional methods/variables used in the rendering
@@ -561,7 +561,7 @@ class IrActionsReport(models.Model):
website=website,
web_base_url=self.env['ir.config_parameter'].sudo().get_param('web.base.url', default=''),
)
- return view_obj.render_template(template, values)
+ return view_obj._render_template(template, values)
def _post_pdf(self, save_in_attachment, pdf_content=None, res_ids=None):
'''Merge the existing attachments by adding one by one the content of the attachments
@@ -678,7 +678,7 @@ class IrActionsReport(models.Model):
writer.write(result_stream)
return result_stream.getvalue()
- def render_qweb_pdf(self, res_ids=None, data=None):
+ def _render_qweb_pdf(self, res_ids=None, data=None):
if not data:
data = {}
data.setdefault('report_type', 'pdf')
@@ -686,7 +686,7 @@ class IrActionsReport(models.Model):
# In case of test environment without enough workers to perform calls to wkhtmltopdf,
# fallback to render_html.
if (tools.config['test_enable'] or tools.config['test_file']) and not self.env.context.get('force_report_rendering'):
- return self.render_qweb_html(res_ids, data=data)
+ return self._render_qweb_html(res_ids, data=data)
# As the assets are generated during the same transaction as the rendering of the
# templates calling them, there is a scenario where the assets are unreachable: when
@@ -713,7 +713,7 @@ class IrActionsReport(models.Model):
# an asset bundle during the execution of test scenarios. In this case, return
# the html version.
if isinstance(self.env.cr, TestCursor):
- return self.with_context(context).render_qweb_html(res_ids, data=data)[0]
+ return self.with_context(context)._render_qweb_html(res_ids, data=data)[0]
save_in_attachment = OrderedDict()
if res_ids:
@@ -747,7 +747,7 @@ class IrActionsReport(models.Model):
# bypassed
raise UserError(_("Unable to find Wkhtmltopdf on this system. The PDF can not be created."))
- html = self.with_context(context).render_qweb_html(res_ids, data=data)[0]
+ html = self.with_context(context)._render_qweb_html(res_ids, data=data)[0]
# Ensure the current document is utf-8 encoded.
html = html.decode('utf-8')
@@ -772,22 +772,22 @@ class IrActionsReport(models.Model):
return pdf_content, 'pdf'
@api.model
- def render_qweb_text(self, docids, data=None):
+ def _render_qweb_text(self, docids, data=None):
if not data:
data = {}
data.setdefault('report_type', 'text')
data = self._get_rendering_context(docids, data)
- return self.render_template(self.report_name, data), 'text'
+ return self._render_template(self.report_name, data), 'text'
@api.model
- def render_qweb_html(self, docids, data=None):
+ def _render_qweb_html(self, docids, data=None):
"""This method generates and returns html version of a report.
"""
if not data:
data = {}
data.setdefault('report_type', 'html')
data = self._get_rendering_context(docids, data)
- return self.render_template(self.report_name, data), 'html'
+ return self._render_template(self.report_name, data), 'html'
@api.model
def _get_rendering_context_model(self):
@@ -813,9 +813,9 @@ class IrActionsReport(models.Model):
})
return data
- def render(self, res_ids, data=None):
+ def _render(self, res_ids, data=None):
report_type = self.report_type.lower().replace('-', '_')
- render_func = getattr(self, 'render_' + report_type, None)
+ render_func = getattr(self, '_render_' + report_type, None)
if not render_func:
return None
return render_func(res_ids, data=data)
diff --git a/odoo/addons/base/models/ir_qweb.py b/odoo/addons/base/models/ir_qweb.py
index 10ed4ad7c2f..9acfa1be75b 100644
--- a/odoo/addons/base/models/ir_qweb.py
+++ b/odoo/addons/base/models/ir_qweb.py
@@ -36,7 +36,7 @@ class IrQWeb(models.AbstractModel, QWeb):
_description = 'Qweb'
@api.model
- def render(self, id_or_xml_id, values=None, **options):
+ def _render(self, id_or_xml_id, values=None, **options):
""" render(id_or_xml_id, values, **options)
Render the template specified by the given name.
@@ -55,7 +55,7 @@ class IrQWeb(models.AbstractModel, QWeb):
context = dict(self.env.context, dev_mode='qweb' in tools.config['dev_mode'])
context.update(options)
- result = super(IrQWeb, self).render(id_or_xml_id, values=values, **context)
+ result = super(IrQWeb, self)._render(id_or_xml_id, values=values, **context)
if b'data-pagebreak=' not in result:
return result
@@ -112,15 +112,16 @@ class IrQWeb(models.AbstractModel, QWeb):
pass
return super(IrQWeb, self).compile(id_or_xml_id, options=options)
- def load(self, name, options):
+ def _load(self, name, options):
lang = options.get('lang', get_lang(self.env).code)
env = self.env
if lang != env.context.get('lang'):
env = env(context=dict(env.context, lang=lang))
- template = env['ir.ui.view'].sudo().read_template(name)
+ view_id = self.env['ir.ui.view'].get_view_id(name)
+ template = env['ir.ui.view'].sudo()._read_template(view_id)
- # QWeb's `read_template` will check if one of the first children of
+ # QWeb's `_read_template` will check if one of the first children of
# what we send to it has a "t-name" attribute having `name` as value
# to consider it has found it. As it'll never be the case when working
# with view ids or children view or children primary views, force it here.
@@ -323,7 +324,7 @@ class IrQWeb(models.AbstractModel, QWeb):
from odoo.addons.web.controllers.main import module_boot
return json.dumps(module_boot())
return '[]'
- template = IrQweb.render(xmlid, {"get_modules_order": get_modules_order})
+ template = IrQweb._render(xmlid, {"get_modules_order": get_modules_order})
files = []
remains = []
diff --git a/odoo/addons/base/models/ir_qweb_fields.py b/odoo/addons/base/models/ir_qweb_fields.py
index c629a55d3c1..eab968c6013 100644
--- a/odoo/addons/base/models/ir_qweb_fields.py
+++ b/odoo/addons/base/models/ir_qweb_fields.py
@@ -681,7 +681,7 @@ class Contact(models.AbstractModel):
'object': value,
'options': options
}
- return self.env['ir.qweb'].render('base.contact', val, **options.get('template_options', dict()))
+ return self.env['ir.qweb']._render('base.contact', val, **options.get('template_options', dict()))
class QwebView(models.AbstractModel):
@@ -700,4 +700,4 @@ class QwebView(models.AbstractModel):
_logger.warning("%s.%s must be a 'ir.ui.view' model." % (record, field_name))
return None
- return pycompat.to_text(view.render(options.get('values', {}), engine='ir.qweb'))
+ return pycompat.to_text(view._render(options.get('values', {}), engine='ir.qweb'))
diff --git a/odoo/addons/base/models/ir_ui_view.py b/odoo/addons/base/models/ir_ui_view.py
index 1acd844c7cb..6b8b50ceb88 100644
--- a/odoo/addons/base/models/ir_ui_view.py
+++ b/odoo/addons/base/models/ir_ui_view.py
@@ -1491,6 +1491,9 @@ actual arch.
@api.model
def read_template(self, xml_id):
+ """ Return a template content based on external id
+ Read access on ir.ui.view required
+ """
return self._read_template(self.get_view_id(xml_id))
@api.model
@@ -1599,16 +1602,23 @@ actual arch.
return '%s.%s' % (xmlid['module'], xmlid['name'])
@api.model
- def render_template(self, template, values=None, engine='ir.qweb'):
- return self.browse(self.get_view_id(template)).render(values, engine)
+ def render_public_asset(self, template, values=None):
+ if template not in PUBLIC_ASSETS:
+ _logger.warning("Add the external id %s in global variable PUBLC_ASSSETS to make the arch accessible in RPC", template)
+ raise ValidationError(_("Asset %s not accessible") % template)
+ template = self.browse(self.get_view_id(template))
+ return template.sudo()._render(values, engine="ir.qweb")
+
+ def _render_template(self, template, values=None, engine='ir.qweb'):
+ return self.browse(self.get_view_id(template))._render(values, engine)
- def render(self, values=None, engine='ir.qweb', minimal_qcontext=False):
+ def _render(self, values=None, engine='ir.qweb', minimal_qcontext=False):
assert isinstance(self.id, int)
qcontext = dict() if minimal_qcontext else self._prepare_qcontext()
qcontext.update(values or {})
- return self.env[engine].render(self.id, qcontext)
+ return self.env[engine]._render(self.id, qcontext)
@api.model
def _prepare_qcontext(self):
diff --git a/odoo/addons/base/models/qweb.py b/odoo/addons/base/models/qweb.py
index 02eebb87fa3..464cb7a166e 100644
--- a/odoo/addons/base/models/qweb.py
+++ b/odoo/addons/base/models/qweb.py
@@ -240,7 +240,7 @@ class QWeb(object):
'link', 'menuitem', 'meta', 'param', 'source', 'track', 'wbr'])
_name_gen = count()
- def render(self, template, values=None, **options):
+ def _render(self, template, values=None, **options):
""" render(template, values, **options)
Render the template specified by the given name.
@@ -351,7 +351,7 @@ class QWeb(object):
return (document, template)
else:
try:
- document = options.get('load', self.load)(template, options)
+ document = options.get('load', self._load)(template, options)
except QWebException as e:
raise e
except Exception as e:
@@ -375,7 +375,7 @@ class QWeb(object):
return (node, document)
return (element, document)
- def load(self, template, options):
+ def _load(self, template, options):
""" Load a given template. """
return template
diff --git a/odoo/addons/base/tests/test_qweb.py b/odoo/addons/base/tests/test_qweb.py
index 780dc6a0cc5..00cf26d4031 100644
--- a/odoo/addons/base/tests/test_qweb.py
+++ b/odoo/addons/base/tests/test_qweb.py
@@ -25,7 +25,7 @@ class TestQWebTField(TransactionCase):
field = etree.Element('span', {'t-field': u'company.name'})
company = self.env['res.company'].create({'name': "My Test Company"})
- result = self.engine.render(field, {'company': company})
+ result = self.engine._render(field, {'company': company})
self.assertEqual(
etree.fromstring(result),
etree.fromstring(u'<span data-oe-model="res.company" data-oe-id="%d" '
@@ -41,7 +41,7 @@ class TestQWebTField(TransactionCase):
s = u"Testing «ταБЬℓσ»: 1<2 & 4+1>3, now 20% off!"
company = self.env['res.company'].create({'name': s})
- result = self.engine.render(field, {'company': company})
+ result = self.engine._render(field, {'company': company})
self.assertEqual(
etree.fromstring(result),
etree.fromstring(u'<span data-oe-model="res.company" data-oe-id="%d" '
@@ -56,13 +56,13 @@ class TestQWebTField(TransactionCase):
field = etree.Element('td', {'t-field': u'company.name'})
with self.assertRaisesRegex(QWebException, r'^RTE widgets do not work correctly'):
- self.engine.render(field, {'company': None})
+ self.engine._render(field, {'company': None})
def test_reject_t_tag(self):
field = etree.Element('t', {'t-field': u'company.name'})
with self.assertRaisesRegex(QWebException, r'^t-field can not be used on a t element'):
- self.engine.render(field, {'company': None})
+ self.engine._render(field, {'company': None})
def test_render_t_options(self):
view1 = self.env['ir.ui.view'].create({
@@ -72,7 +72,7 @@ class TestQWebTField(TransactionCase):
<t t-name="base.dummy"><root><span t-esc="5" t-options="{'widget': 'char'}" t-options-widget="'float'" t-options-precision="4"/></root></t>
"""
})
- text = etree.fromstring(view1.render()).find('span').text
+ text = etree.fromstring(view1._render()).find('span').text
self.assertEqual(text, u'5.0000')
def test_xss_breakout(self):
@@ -88,7 +88,7 @@ class TestQWebTField(TransactionCase):
</t>
"""
})
- rendered = view.render({'malicious': '1</script><script>alert("pwned")</script><script>'}).decode()
+ rendered = view._render({'malicious': '1</script><script>alert("pwned")</script><script>'}).decode()
self.assertIn('alert', rendered, "%r doesn't seem to be rendered" % rendered)
doc = etree.fromstring(rendered)
self.assertEqual(len(doc.xpath('//script')), 1)
@@ -119,7 +119,7 @@ class TestQWebNS(TransactionCase):
""" % expected_result
})
- self.assertEqual(etree.fromstring(view1.render()), etree.fromstring(expected_result))
+ self.assertEqual(etree.fromstring(view1._render()), etree.fromstring(expected_result))
def test_render_static_xml_with_namespace_2(self):
""" Test the rendering on a namespaced view with no static content. The resulting string should be untouched.
@@ -157,7 +157,7 @@ class TestQWebNS(TransactionCase):
""" % expected_result
})
- self.assertEqual(etree.fromstring(view1.render()), etree.fromstring(expected_result))
+ self.assertEqual(etree.fromstring(view1._render()), etree.fromstring(expected_result))
def test_render_static_xml_with_useless_distributed_namespace(self):
""" Test that redundant namespaces are stripped upon rendering.
@@ -190,7 +190,7 @@ class TestQWebNS(TransactionCase):
</root>
""")
- self.assertEqual(etree.fromstring(view1.render()), expected_result)
+ self.assertEqual(etree.fromstring(view1._render()), expected_result)
def test_render_static_xml_with_namespace_3(self):
expected_result = u"""
@@ -205,7 +205,7 @@ class TestQWebNS(TransactionCase):
""" % expected_result
})
- self.assertEqual(etree.fromstring(view1.render()), etree.fromstring(expected_result))
+ self.assertEqual(etree.fromstring(view1._render()), etree.fromstring(expected_result))
def test_render_dynamic_xml_with_namespace_t_esc(self):
""" Test that rendering a template containing a node having both an ns declaration and a t-esc attribute correctly
@@ -223,7 +223,7 @@ class TestQWebNS(TransactionCase):
expected_result = etree.fromstring(u"""<Invoice xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2">test</Invoice>""")
- self.assertEqual(etree.fromstring(view1.render()), expected_result)
+ self.assertEqual(etree.fromstring(view1._render()), expected_result)
def test_render_dynamic_xml_with_namespace_t_esc_with_useless_distributed_namespace(self):
""" Test that rendering a template containing a node having both an ns declaration and a t-esc attribute correctly
@@ -247,7 +247,7 @@ class TestQWebNS(TransactionCase):
</Invoice>
""")
- self.assertEqual(etree.fromstring(view1.render()), expected_result)
+ self.assertEqual(etree.fromstring(view1._render()), expected_result)
def test_render_dynamic_xml_with_namespace_t_attf(self):
""" Test that rendering a template containing a node having both an ns declaration and a t-attf attribute correctly
@@ -287,7 +287,7 @@ class TestQWebNS(TransactionCase):
</root>
""")
- self.assertEqual(etree.fromstring(view1.render()), expected_result)
+ self.assertEqual(etree.fromstring(view1._render()), expected_result)
def test_render_dynamic_xml_with_namespace_t_attf_with_useless_distributed_namespace(self):
""" Test that rendering a template containing a node having both an ns declaration and a t-attf attribute correctly
@@ -329,7 +329,7 @@ class TestQWebNS(TransactionCase):
""")
- self.assertEqual(etree.fromstring(view1.render()), expected_result)
+ self.assertEqual(etree.fromstring(view1._render()), expected_result)
def test_render_dynamic_xml_with_namespace_2(self):
view1 = self.env['ir.ui.view'].create({
@@ -362,7 +362,7 @@ class TestQWebNS(TransactionCase):
</Invoice>
""")
- self.assertEqual(etree.fromstring(view1.render({'version_id': 1.0})), expected_result)
+ self.assertEqual(etree.fromstring(view1._render({'version_id': 1.0})), expected_result)
def test_render_static_xml_with_namespaced_attributes(self):
view1 = self.env['ir.ui.view'].create({
@@ -377,7 +377,7 @@ class TestQWebNS(TransactionCase):
expected_result = etree.fromstring(u"""<cfdi:Comprobante xmlns:cfdi="http://www.sat.gob.mx/cfd/3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv32.xsd">abc</cfdi:Comprobante>""")
- self.assertEqual(etree.fromstring(view1.render()), expected_result)
+ self.assertEqual(etree.fromstring(view1._render()), expected_result)
def test_render_dynamic_xml_with_namespaced_attributes(self):
view1 = self.env['ir.ui.view'].create({
@@ -392,7 +392,7 @@ class TestQWebNS(TransactionCase):
expected_result = etree.fromstring("""<cfdi:Comprobante xmlns:cfdi="http://www.sat.gob.mx/cfd/3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv32.xsd">abc</cfdi:Comprobante>""")
- self.assertEqual(etree.fromstring(view1.render()), expected_result)
+ self.assertEqual(etree.fromstring(view1._render()), expected_result)
def test_render_static_xml_with_t_call(self):
view1 = self.env['ir.ui.view'].create({
@@ -426,7 +426,7 @@ class TestQWebNS(TransactionCase):
"""
})
- result = view2.render()
+ result = view2._render()
result_etree = etree.fromstring(result)
# check that the root tag has all its xmlns
@@ -490,7 +490,7 @@ class TestQWebNS(TransactionCase):
""")
self.assertEqual(
- etree.fromstring(view1.with_context(check_view_ids=[view1.id, view2.id]).render()),
+ etree.fromstring(view1.with_context(check_view_ids=[view1.id, view2.id])._render()),
expected_result
)
@@ -516,7 +516,7 @@ class TestQWebNS(TransactionCase):
error_msg = e.args[0]
with self.assertRaises(QWebException, msg=error_msg):
- view1.render()
+ view1._render()
def test_render_t_call_propagates_t_lang(self):
current_lang = 'en_US'
@@ -554,7 +554,7 @@ class TestQWebNS(TransactionCase):
""" % other_lang
})
- rendered = view2.with_context(lang=current_lang).render().strip()
+ rendered = view2.with_context(lang=current_lang)._render().strip()
self.assertEqual(rendered, b'9/000/000*00')
@@ -622,7 +622,7 @@ class TestQWeb(TransactionCase):
result = doc.find('result[@id="{}"]'.format(template)).text
self.assertEqual(
- qweb.render(template, values=params, load=loader).strip(),
+ qweb._render(template, values=params, load=loader).strip(),
(result or u'').strip().encode('utf-8'),
template
)
@@ -646,7 +646,7 @@ class TestPageSplit(TransactionCase):
</t>
'''
})
- rendered = html.fromstring(self.env['ir.qweb'].render(t.id))
+ rendered = html.fromstring(self.env['ir.qweb']._render(t.id))
ref = E.div(
E.table(E.tr()),
E.div({'style': 'page-break-after: always'}),
@@ -669,7 +669,7 @@ class TestPageSplit(TransactionCase):
</t>
'''
})
- rendered = html.fromstring(self.env['ir.qweb'].render(t.id))
+ rendered = html.fromstring(self.env['ir.qweb']._render(t.id))
self.assertTreesEqual(
rendered,
E.div(
@@ -694,7 +694,7 @@ class TestPageSplit(TransactionCase):
</t>
'''
})
- rendered = html.fromstring(self.env['ir.qweb'].render(t.id))
+ rendered = html.fromstring(self.env['ir.qweb']._render(t.id))
self.assertTreesEqual(
rendered,
E.div(E.table(E.tr(), E.tr(), E.tr()))
diff --git a/odoo/addons/base/tests/test_reports.py b/odoo/addons/base/tests/test_reports.py
index bcbdb9bae0d..3ba9a669df6 100644
--- a/odoo/addons/base/tests/test_reports.py
+++ b/odoo/addons/base/tests/test_reports.py
@@ -28,6 +28,6 @@ class TestReports(odoo.tests.TransactionCase):
report_records = report_records[:1]
# Test report generation
- report.render_qweb_html(report_records.ids)
+ report._render_qweb_html(report_records.ids)
else:
continue
diff --git a/odoo/addons/base/tests/test_views.py b/odoo/addons/base/tests/test_views.py
index 02ac6af18c2..27a465b713a 100644
--- a/odoo/addons/base/tests/test_views.py
+++ b/odoo/addons/base/tests/test_views.py
@@ -2855,8 +2855,8 @@ class TestQWebRender(ViewCase):
})
# render view and child view with an id
- content1 = self.env['ir.qweb'].with_context(check_view_ids=[view1.id, view2.id]).render(view1.id)
- content2 = self.env['ir.qweb'].with_context(check_view_ids=[view1.id, view2.id]).render(view2.id)
+ content1 = self.env['ir.qweb'].with_context(check_view_ids=[view1.id, view2.id])._render(view1.id)
+ content2 = self.env['ir.qweb'].with_context(check_view_ids=[view1.id, view2.id])._render(view2.id)
self.assertEqual(content1, content2)
@@ -2866,14 +2866,14 @@ class TestQWebRender(ViewCase):
self.env.cr.execute("INSERT INTO ir_model_data(name, model, res_id, module)"
"VALUES ('dummy_ext', 'ir.ui.view', %s, 'base')" % view2.id)
- content1 = self.env['ir.qweb'].with_context(check_view_ids=[view1.id, view2.id]).render('base.dummy')
- content2 = self.env['ir.qweb'].with_context(check_view_ids=[view1.id, view2.id]).render('base.dummy_ext')
+ content1 = self.env['ir.qweb'].with_context(check_view_ids=[view1.id, view2.id])._render('base.dummy')
+ content2 = self.env['ir.qweb'].with_context(check_view_ids=[view1.id, view2.id])._render('base.dummy_ext')
self.assertEqual(content1, content2)
# render view and primary extension with an id
- content1 = self.env['ir.qweb'].with_context(check_view_ids=[view1.id, view2.id, view3.id]).render(view1.id)
- content3 = self.env['ir.qweb'].with_context(check_view_ids=[view1.id, view2.id, view3.id]).render(view3.id)
+ content1 = self.env['ir.qweb'].with_context(check_view_ids=[view1.id, view2.id, view3.id])._render(view1.id)
+ content3 = self.env['ir.qweb'].with_context(check_view_ids=[view1.id, view2.id, view3.id])._render(view3.id)
self.assertNotEqual(content1, content3)
@@ -2881,8 +2881,8 @@ class TestQWebRender(ViewCase):
self.env.cr.execute("INSERT INTO ir_model_data(name, model, res_id, module)"
"VALUES ('dummy_primary_ext', 'ir.ui.view', %s, 'base')" % view3.id)
- content1 = self.env['ir.qweb'].with_context(check_view_ids=[view1.id, view2.id, view3.id]).render('base.dummy')
- content3 = self.env['ir.qweb'].with_context(check_view_ids=[view1.id, view2.id, view3.id]).render('base.dummy_primary_ext')
+ content1 = self.env['ir.qweb'].with_context(check_view_ids=[view1.id, view2.id, view3.id])._render('base.dummy')
+ content3 = self.env['ir.qweb'].with_context(check_view_ids=[view1.id, view2.id, view3.id])._render('base.dummy_primary_ext')
self.assertNotEqual(content1, content3)
diff --git a/odoo/addons/base/wizard/base_document_layout.py b/odoo/addons/base/wizard/base_document_layout.py
index d380c1c49a6..5232acb7f06 100644
--- a/odoo/addons/base/wizard/base_document_layout.py
+++ b/odoo/addons/base/wizard/base_document_layout.py
@@ -64,7 +64,7 @@ class BaseDocumentLayout(models.TransientModel):
for wizard in self:
if wizard.report_layout_id:
ir_qweb = wizard.env['ir.qweb']
- wizard.preview = ir_qweb.render('base.layout_preview', {'company': wizard})
+ wizard.preview = ir_qweb._render('base.layout_preview', {'company': wizard})
else:
wizard.preview = False
diff --git a/odoo/addons/test_assetsbundle/controllers/main.py b/odoo/addons/test_assetsbundle/controllers/main.py
index 4af6ed14b8e..f6da2ab929b 100644
--- a/odoo/addons/test_assetsbundle/controllers/main.py
+++ b/odoo/addons/test_assetsbundle/controllers/main.py
@@ -10,4 +10,4 @@ class TestAssetsBundleController(Controller):
env = request.env(user=SUPERUSER_ID)
bundle = env.ref('test_assetsbundle.bundle1')
views = env['ir.ui.view'].search([('inherit_id', '=', bundle.id)])
- return views.with_context(check_view_ids=views.ids).render_template('test_assetsbundle.template1')
+ return views.with_context(check_view_ids=views.ids)._render_template('test_assetsbundle.template1')
diff --git a/odoo/addons/test_assetsbundle/tests/test_assetsbundle.py b/odoo/addons/test_assetsbundle/tests/test_assetsbundle.py
index c38245eb19e..7399983af55 100644
--- a/odoo/addons/test_assetsbundle/tests/test_assetsbundle.py
+++ b/odoo/addons/test_assetsbundle/tests/test_assetsbundle.py
@@ -471,7 +471,7 @@ class TestJavascriptAssetsBundle(FileTouchable):
self.assertEqual(len(css_bundle), 1)
def test_20_exteral_lib_assets(self):
- html = self.env['ir.ui.view'].render_template('test_assetsbundle.template2')
+ html = self.env['ir.ui.view']._render_template('test_assetsbundle.template2')
attachments = self.env['ir.attachment'].search([('url', '=like', '/web/content/%-%/test_assetsbundle.bundle4.%')])
self.assertEqual(len(attachments), 2)
self.assertEqual(html.strip(), ("""<!DOCTYPE html>
@@ -490,7 +490,7 @@ class TestJavascriptAssetsBundle(FileTouchable):
</html>""" % {"js": attachments[0].url, "css": attachments[1].url}).encode('utf8'))
def test_21_exteral_lib_assets_debug_mode(self):
- html = self.env['ir.ui.view'].render_template('test_assetsbundle.template2', {"debug": "assets"})
+ html = self.env['ir.ui.view']._render_template('test_assetsbundle.template2', {"debug": "assets"})
attachments = self.env['ir.attachment'].search([('url', '=like', '/web/content/%-%/test_assetsbundle.bundle4.%')])
self.assertEqual(len(attachments), 0)
self.assertEqual(html.strip(), ("""<!DOCTYPE html>