diff options
| author | Martin Trigaux <mat@odoo.com> | 2020-02-14 11:22:15 +0100 |
|---|---|---|
| committer | Martin Trigaux <mat@odoo.com> | 2020-05-14 13:59:10 +0200 |
| commit | d9287caf9408bb4ff85ad734cbca08e44321e205 (patch) | |
| tree | 0d3b7c5705e5172176a7d76bf9098e381190bf4b /addons | |
| parent | 56a8c9e4311d24c33b7ad08b8230e4be345a85b8 (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 'addons')
75 files changed, 126 insertions, 126 deletions
diff --git a/addons/account/controllers/onboarding.py b/addons/account/controllers/onboarding.py index 34e30570563..3c0afa38c3a 100644 --- a/addons/account/controllers/onboarding.py +++ b/addons/account/controllers/onboarding.py @@ -16,7 +16,7 @@ class OnboardingController(http.Controller): return {} return { - 'html': request.env.ref('account.account_invoice_onboarding_panel').render({ + 'html': request.env.ref('account.account_invoice_onboarding_panel')._render({ 'company': company, 'state': company.get_and_update_account_invoice_onboarding_state() }) @@ -34,7 +34,7 @@ class OnboardingController(http.Controller): return {} return { - 'html': request.env.ref('account.account_dashboard_onboarding_panel').render({ + 'html': request.env.ref('account.account_dashboard_onboarding_panel')._render({ 'company': company, 'state': company.get_and_update_account_dashboard_onboarding_state() }) diff --git a/addons/account/models/account_bank_statement.py b/addons/account/models/account_bank_statement.py index 6a9035ba299..461b40b33e8 100644 --- a/addons/account/models/account_bank_statement.py +++ b/addons/account/models/account_bank_statement.py @@ -396,7 +396,7 @@ class AccountBankStatement(models.Model): # Bank statement report. if statement.journal_id.type == 'bank': - content, content_type = self.env.ref('account.action_report_account_statement').render(statement.id) + content, content_type = self.env.ref('account.action_report_account_statement')._render(statement.id) self.env['ir.attachment'].create({ 'name': statement.name and _("Bank Statement %s.pdf") % statement.name or _("Bank Statement.pdf"), 'type': 'binary', diff --git a/addons/account_facturx/models/account_move.py b/addons/account_facturx/models/account_move.py index c0571cf0c86..abab584a0b9 100644 --- a/addons/account_facturx/models/account_move.py +++ b/addons/account_facturx/models/account_move.py @@ -43,7 +43,7 @@ class AccountMove(models.Model): 'format_date': format_date, 'format_monetary': format_monetary, } - content = self.env.ref('account_facturx.account_invoice_facturx_export').render(template_values) + content = self.env.ref('account_facturx.account_invoice_facturx_export')._render(template_values) return b"<?xml version='1.0' encoding='UTF-8'?>" + content def _import_facturx_invoice(self, tree): diff --git a/addons/calendar/controllers/main.py b/addons/calendar/controllers/main.py index e3f43f87bd0..f341483fed6 100644 --- a/addons/calendar/controllers/main.py +++ b/addons/calendar/controllers/main.py @@ -76,7 +76,7 @@ class CalendarController(http.Controller): # - we need a template rendering which is not lazy, to render before cursor closing # - we need to display the template in the language of the user (not possible with # request.render()) - response_content = request.env['ir.ui.view'].with_context(lang=lang).render_template( + response_content = request.env['ir.ui.view'].with_context(lang=lang)._render_template( 'calendar.invitation_page_anonymous', { 'event': event, 'attendee': attendee, diff --git a/addons/event_sale/models/event_registration.py b/addons/event_sale/models/event_registration.py index e245a59cbea..f1995af17d7 100644 --- a/addons/event_sale/models/event_registration.py +++ b/addons/event_sale/models/event_registration.py @@ -91,7 +91,7 @@ class EventRegistration(models.Model): 'new_ticket_name': new_event_ticket.name } user_id = registration.event_id.user_id.id or registration.sale_order_id.user_id.id or fallback_user_id - registration.sale_order_id.activity_schedule_with_view( + registration.sale_order_id._activity_schedule_with_view( 'mail.mail_activity_data_warning', user_id=user_id, views_or_xmlid='event_sale.event_ticket_id_change_exception', diff --git a/addons/hr/tests/test_multi_company.py b/addons/hr/tests/test_multi_company.py index bb07225749e..10f9c4f8173 100644 --- a/addons/hr/tests/test_multi_company.py +++ b/addons/hr/tests/test_multi_company.py @@ -25,7 +25,7 @@ class TestMultiCompany(TestHrCommon): def test_multi_company_report(self): content, content_type = self.env.ref('hr.hr_employee_print_badge').with_user(self.res_users_hr_officer).with_context( allowed_company_ids=[self.company_1.id, self.company_2.id] - ).render_qweb_pdf(res_ids=self.employees.ids) + )._render_qweb_pdf(res_ids=self.employees.ids) self.assertIn(b'Bidule', content) self.assertIn(b'Machin', content) @@ -33,4 +33,4 @@ class TestMultiCompany(TestHrCommon): with self.assertRaises(QWebException): # CacheMiss followed by AccessError content, content_type = self.env.ref('hr.hr_employee_print_badge').with_user(self.res_users_hr_officer).with_company( self.company_1 - ).render_qweb_pdf(res_ids=self.employees.ids) + )._render_qweb_pdf(res_ids=self.employees.ids) diff --git a/addons/hr_expense/models/hr_expense.py b/addons/hr_expense/models/hr_expense.py index 01ce03fe56b..51888cee2b3 100644 --- a/addons/hr_expense/models/hr_expense.py +++ b/addons/hr_expense/models/hr_expense.py @@ -665,7 +665,7 @@ class HrExpense(models.Model): def _send_expense_success_mail(self, msg_dict, expense): mail_template_id = 'hr_expense.hr_expense_template_register' if expense.employee_id.user_id else 'hr_expense.hr_expense_template_register_no_user' expense_template = self.env.ref(mail_template_id) - rendered_body = expense_template.render({'expense': expense}, engine='ir.qweb') + rendered_body = expense_template._render({'expense': expense}, engine='ir.qweb') body = self.env['mail.render.mixin']._replace_local_links(rendered_body) # TDE TODO: seems louche, check to use notify if expense.employee_id.user_id.partner_id: diff --git a/addons/http_routing/models/ir_http.py b/addons/http_routing/models/ir_http.py index 7200c6153a8..9bd74a0a37d 100644 --- a/addons/http_routing/models/ir_http.py +++ b/addons/http_routing/models/ir_http.py @@ -601,7 +601,7 @@ class IrHttp(models.AbstractModel): @classmethod def _get_error_html(cls, env, code, values): - return code, env['ir.ui.view'].render_template('http_routing.%s' % code, values) + return code, env['ir.ui.view']._render_template('http_routing.%s' % code, values) @classmethod def _handle_exception(cls, exception): @@ -658,6 +658,6 @@ class IrHttp(models.AbstractModel): try: code, html = cls._get_error_html(env, code, values) except Exception: - code, html = 418, env['ir.ui.view'].render_template('http_routing.http_error', values) + code, html = 418, env['ir.ui.view']._render_template('http_routing.http_error', values) return werkzeug.wrappers.Response(html, status=code, content_type='text/html;charset=utf-8') diff --git a/addons/iap/models/iap.py b/addons/iap/models/iap.py index 4dfd08b88c0..34911b8a42b 100644 --- a/addons/iap/models/iap.py +++ b/addons/iap/models/iap.py @@ -94,7 +94,7 @@ def authorize(env, key, account_token, credit, dbuuid=False, description=None, c except InsufficientCreditError as e: if credit_template: arguments = json.loads(e.args[0]) - arguments['body'] = pycompat.to_text(env['ir.qweb'].render(credit_template)) + arguments['body'] = pycompat.to_text(env['ir.qweb']._render(credit_template)) e.args = (json.dumps(arguments),) raise e return transaction_token diff --git a/addons/im_livechat/models/im_livechat_channel.py b/addons/im_livechat/models/im_livechat_channel.py index 3bfcc6f0836..41031fbd118 100644 --- a/addons/im_livechat/models/im_livechat_channel.py +++ b/addons/im_livechat/models/im_livechat_channel.py @@ -65,7 +65,7 @@ class ImLivechatChannel(models.Model): } for record in self: values["channel_id"] = record.id - record.script_external = view.render(values) + record.script_external = view._render(values) def _compute_web_page_link(self): base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url') diff --git a/addons/im_livechat/models/mail_channel.py b/addons/im_livechat/models/mail_channel.py index 38ee150bb00..dae1d70cb81 100644 --- a/addons/im_livechat/models/mail_channel.py +++ b/addons/im_livechat/models/mail_channel.py @@ -184,7 +184,7 @@ class MailChannel(models.Model): "channel": self, } template = self.env.ref('im_livechat.livechat_email_template') - mail_body = template.render(render_context, engine='ir.qweb', minimal_qcontext=True) + mail_body = template._render(render_context, engine='ir.qweb', minimal_qcontext=True) mail_body = self.env['mail.render.mixin']._replace_local_links(mail_body) mail = self.env['mail.mail'].sudo().create({ 'subject': _('Conversation with %s') % self.livechat_operator_id.name, diff --git a/addons/l10n_ch/models/mail_template.py b/addons/l10n_ch/models/mail_template.py index 2231b42a2e6..2fdeaed12da 100644 --- a/addons/l10n_ch/models/mail_template.py +++ b/addons/l10n_ch/models/mail_template.py @@ -36,10 +36,10 @@ class MailTemplate(models.Model): isr_report_name = 'ISR-' + inv_print_name + '.pdf' qr_report_name = 'QR-bill-' + inv_print_name + '.pdf' - isr_pdf = self.env.ref('l10n_ch.l10n_ch_isr_report').render_qweb_pdf(record.ids)[0] + isr_pdf = self.env.ref('l10n_ch.l10n_ch_isr_report')._render_qweb_pdf(record.ids)[0] isr_pdf = base64.b64encode(isr_pdf) - qr_pdf = self.env.ref('l10n_ch.l10n_ch_qr_report').render_qweb_pdf(record.ids)[0] + qr_pdf = self.env.ref('l10n_ch.l10n_ch_qr_report')._render_qweb_pdf(record.ids)[0] qr_pdf = base64.b64encode(qr_pdf) new_attachments = [(isr_report_name, isr_pdf), (qr_report_name, qr_pdf)] diff --git a/addons/l10n_it_edi/models/account_invoice.py b/addons/l10n_it_edi/models/account_invoice.py index af0a5698c83..c511de477d8 100644 --- a/addons/l10n_it_edi/models/account_invoice.py +++ b/addons/l10n_it_edi/models/account_invoice.py @@ -233,7 +233,7 @@ class AccountMove(models.Model): else: document_type = 'TD0X' - pdf = self.env.ref('account.account_invoices').render_qweb_pdf(self.id)[0] + pdf = self.env.ref('account.account_invoices')._render_qweb_pdf(self.id)[0] pdf = base64.b64encode(pdf) pdf_name = re.sub(r'\W+', '', self.name) + '.pdf' @@ -254,7 +254,7 @@ class AccountMove(models.Model): 'pdf': pdf, 'pdf_name': pdf_name, } - content = self.env.ref('l10n_it_edi.account_invoice_it_FatturaPA_export').render(template_values) + content = self.env.ref('l10n_it_edi.account_invoice_it_FatturaPA_export')._render(template_values) return content def send_pec_mail(self): diff --git a/addons/lunch/controllers/main.py b/addons/lunch/controllers/main.py index 5dc9b509bf1..305c80afe2b 100644 --- a/addons/lunch/controllers/main.py +++ b/addons/lunch/controllers/main.py @@ -60,7 +60,7 @@ class LunchController(http.Controller): @http.route('/lunch/payment_message', type='json', auth='user') def payment_message(self): - return {'message': request.env['ir.qweb'].render('lunch.lunch_payment_dialog', {})} + return {'message': request.env['ir.qweb']._render('lunch.lunch_payment_dialog', {})} @http.route('/lunch/user_location_set', type='json', auth='user') def set_user_location(self, location_id=None, user_id=None): diff --git a/addons/mail/models/mail_activity.py b/addons/mail/models/mail_activity.py index 827dcc5e33e..0822c3adb06 100644 --- a/addons/mail/models/mail_activity.py +++ b/addons/mail/models/mail_activity.py @@ -393,7 +393,7 @@ class MailActivity(models.Model): body_template = body_template.with_context(lang=activity.user_id.lang) activity = activity.with_context(lang=activity.user_id.lang) model_description = self.env['ir.model']._get(activity.res_model).display_name - body = body_template.render( + body = body_template._render( dict( activity=activity, model_description=model_description, @@ -798,7 +798,7 @@ class MailActivityMixin(models.AbstractModel): activities |= self.env['mail.activity'].create(create_vals) return activities - def activity_schedule_with_view(self, act_type_xmlid='', date_deadline=None, summary='', views_or_xmlid='', render_context=None, **act_values): + def _activity_schedule_with_view(self, act_type_xmlid='', date_deadline=None, summary='', views_or_xmlid='', render_context=None, **act_values): """ Helper method: Schedule an activity on each record of the current record set. This method allow to the same mecanism as `activity_schedule`, but provide 2 additionnal parameters: @@ -821,7 +821,7 @@ class MailActivityMixin(models.AbstractModel): activities = self.env['mail.activity'] for record in self: render_context['object'] = record - note = views.render(render_context, engine='ir.qweb', minimal_qcontext=True) + note = views._render(render_context, engine='ir.qweb', minimal_qcontext=True) activities |= record.activity_schedule(act_type_xmlid=act_type_xmlid, date_deadline=date_deadline, summary=summary, note=note, **act_values) return activities diff --git a/addons/mail/models/mail_alias.py b/addons/mail/models/mail_alias.py index e66cf303b98..22ef164966c 100644 --- a/addons/mail/models/mail_alias.py +++ b/addons/mail/models/mail_alias.py @@ -182,7 +182,7 @@ Only allowed people can contact us at this address.""" % message_dict.get('to')) else: body = self._get_alias_bounced_body_fallback(message_dict) template = self.env.ref('mail.mail_bounce_alias_security', raise_if_not_found=True) - return template.render({ + return template._render({ 'body': body, 'message': message_dict }, engine='ir.qweb', minimal_qcontext=True) diff --git a/addons/mail/models/mail_channel.py b/addons/mail/models/mail_channel.py index 590a598e727..5d9d988d9dc 100644 --- a/addons/mail/models/mail_channel.py +++ b/addons/mail/models/mail_channel.py @@ -426,7 +426,7 @@ class Channel(models.Model): create_values = { 'email_from': company.catchall_formatted or company.email_formatted, 'author_id': self.env.user.partner_id.id, - 'body_html': view.render({'channel': self, 'partner': partner}, engine='ir.qweb', minimal_qcontext=True), + 'body_html': view._render({'channel': self, 'partner': partner}, engine='ir.qweb', minimal_qcontext=True), 'subject': _("Guidelines of channel %s") % self.name, 'recipient_ids': [(4, partner.id)] } diff --git a/addons/mail/models/mail_message.py b/addons/mail/models/mail_message.py index bddbcb91b98..733ff7d7f4c 100644 --- a/addons/mail/models/mail_message.py +++ b/addons/mail/models/mail_message.py @@ -935,7 +935,7 @@ class Message(models.Model): MailThread.message_notify( partner_ids=moderator.partner_id.ids, subject=_('Message are pending moderation'), # tocheck: target language - body=template.render({'record': moderator.partner_id}, engine='ir.qweb', minimal_qcontext=True), + body=template._render({'record': moderator.partner_id}, engine='ir.qweb', minimal_qcontext=True), email_from=moderator.company_id.catchall_formatted or moderator.company_id.email_formatted, ) diff --git a/addons/mail/models/mail_template.py b/addons/mail/models/mail_template.py index c4d590e2729..f8f90aea5fd 100644 --- a/addons/mail/models/mail_template.py +++ b/addons/mail/models/mail_template.py @@ -196,9 +196,9 @@ class MailTemplate(models.Model): report_service = report.report_name if report.report_type in ['qweb-html', 'qweb-pdf']: - result, format = report.render_qweb_pdf([res_id]) + result, format = report._render_qweb_pdf([res_id]) else: - res = report.render([res_id]) + res = report._render([res_id]) if not res: raise UserError(_('Unsupported report type %s found.') % report.report_type) result, format = res @@ -267,7 +267,7 @@ class MailTemplate(models.Model): 'company': 'company_id' in record and record['company_id'] or self.env.company, 'record': record, } - body = template.render(template_ctx, engine='ir.qweb', minimal_qcontext=True) + body = template._render(template_ctx, engine='ir.qweb', minimal_qcontext=True) values['body_html'] = self.env['mail.render.mixin']._replace_local_links(body) mail = self.env['mail.mail'].sudo().create(values) diff --git a/addons/mail/models/mail_thread.py b/addons/mail/models/mail_thread.py index 77623b08ff7..349396ee0a4 100644 --- a/addons/mail/models/mail_thread.py +++ b/addons/mail/models/mail_thread.py @@ -1015,7 +1015,7 @@ class MailThread(models.AbstractModel): # check it does not directly contact catchall if catchall_alias and all(email_localpart == catchall_alias for email_localpart in email_to_localparts): _logger.info('Routing mail from %s to %s with Message-Id %s: direct write to catchall, bounce', email_from, email_to, message_id) - body = self.env.ref('mail.mail_bounce_catchall').render({ + body = self.env.ref('mail.mail_bounce_catchall')._render({ 'message': message, }, engine='ir.qweb') self._routing_create_bounce_email(email_from, body, message, references=message_id, reply_to=self.env.company.email) @@ -1968,7 +1968,7 @@ class MailThread(models.AbstractModel): return for record in self: values['object'] = record - rendered_template = views.render(values, engine='ir.qweb', minimal_qcontext=True) + rendered_template = views._render(values, engine='ir.qweb', minimal_qcontext=True) kwargs['body'] = rendered_template record.message_post_with_template(False, **kwargs) @@ -2294,7 +2294,7 @@ class MailThread(models.AbstractModel): # {actions, button_access, has_button_access, recipients} if base_template: - mail_body = base_template.render(render_values, engine='ir.qweb', minimal_qcontext=True) + mail_body = base_template._render(render_values, engine='ir.qweb', minimal_qcontext=True) else: mail_body = message.body mail_body = self.env['mail.render.mixin']._replace_local_links(mail_body) @@ -2886,7 +2886,7 @@ class MailThread(models.AbstractModel): 'model_description': model_description, 'access_link': self._notify_get_action_link('view'), } - assignation_msg = view.render(values, engine='ir.qweb', minimal_qcontext=True) + assignation_msg = view._render(values, engine='ir.qweb', minimal_qcontext=True) assignation_msg = self.env['mail.render.mixin']._replace_local_links(assignation_msg) record.message_notify( subject=_('You have been assigned to %s') % record.display_name, diff --git a/addons/mass_mailing/wizard/mail_compose_message.py b/addons/mass_mailing/wizard/mail_compose_message.py index db5818c02e0..726410ef6af 100644 --- a/addons/mass_mailing/wizard/mail_compose_message.py +++ b/addons/mass_mailing/wizard/mail_compose_message.py @@ -77,7 +77,7 @@ class MailComposeMessage(models.TransientModel): 'email': mail_to, } if mail_values.get('body_html') and mass_mail_layout: - mail_values['body_html'] = mass_mail_layout.render({'body': mail_values['body_html']}, engine='ir.qweb', minimal_qcontext=True) + mail_values['body_html'] = mass_mail_layout._render({'body': mail_values['body_html']}, engine='ir.qweb', minimal_qcontext=True) # propagate ignored state to trace when still-born if mail_values.get('state') == 'cancel': trace_vals['ignored'] = fields.Datetime.now() diff --git a/addons/mass_mailing/wizard/mailing_mailing_test.py b/addons/mass_mailing/wizard/mailing_mailing_test.py index 45de0d88019..8dbeff90089 100644 --- a/addons/mass_mailing/wizard/mailing_mailing_test.py +++ b/addons/mass_mailing/wizard/mailing_mailing_test.py @@ -31,7 +31,7 @@ class TestMassMailing(models.TransientModel): 'reply_to': mailing.reply_to, 'email_to': test_mail, 'subject': mailing.subject, - 'body_html': mass_mail_layout.render({'body': body}, engine='ir.qweb', minimal_qcontext=True), + 'body_html': mass_mail_layout._render({'body': body}, engine='ir.qweb', minimal_qcontext=True), 'notification': True, 'mailing_id': mailing.id, 'attachment_ids': [(4, attachment.id) for attachment in mailing.attachment_ids], diff --git a/addons/mrp/models/mrp_production.py b/addons/mrp/models/mrp_production.py index b87c8716737..f6529bff906 100644 --- a/addons/mrp/models/mrp_production.py +++ b/addons/mrp/models/mrp_production.py @@ -1190,7 +1190,7 @@ class MrpProduction(models.Model): 'impacted_pickings': False, 'cancel': cancel } - return self.env.ref('mrp.exception_on_mo').render(values=values) + return self.env.ref('mrp.exception_on_mo')._render(values=values) documents = self.env['stock.picking']._log_activity_get_documents(moves_modification, 'move_dest_ids', 'DOWN', _keys_in_sorted, _keys_in_groupby) documents = self.env['stock.picking']._less_quantities_than_expected_add_documents(moves_modification, documents) @@ -1216,7 +1216,7 @@ class MrpProduction(models.Model): 'impacted_object': impacted_object, 'cancel': cancel } - return self.env.ref('mrp.exception_on_mo').render(values=values) + return self.env.ref('mrp.exception_on_mo')._render(values=values) self.env['stock.picking']._log_activity(_render_note_exception_quantity_mo, documents) diff --git a/addons/mrp/report/mrp_report_bom_structure.py b/addons/mrp/report/mrp_report_bom_structure.py index 8a743e94dc0..05c3bafbd3d 100644 --- a/addons/mrp/report/mrp_report_bom_structure.py +++ b/addons/mrp/report/mrp_report_bom_structure.py @@ -44,13 +44,13 @@ class ReportBomStructure(models.AbstractModel): res['lines']['report_type'] = 'html' res['lines']['report_structure'] = 'all' res['lines']['has_attachments'] = res['lines']['attachments'] or any(component['attachments'] for component in res['lines']['components']) - res['lines'] = self.env.ref('mrp.report_mrp_bom').render({'data': res['lines']}) + res['lines'] = self.env.ref('mrp.report_mrp_bom')._render({'data': res['lines']}) return res @api.model def get_bom(self, bom_id=False, product_id=False, line_qty=False, line_id=False, level=False): lines = self._get_bom(bom_id=bom_id, product_id=product_id, line_qty=line_qty, line_id=line_id, level=level) - return self.env.ref('mrp.report_mrp_bom_line').render({'data': lines}) + return self.env.ref('mrp.report_mrp_bom_line')._render({'data': lines}) @api.model def get_operations(self, bom_id=False, qty=0, level=0): @@ -61,7 +61,7 @@ class ReportBomStructure(models.AbstractModel): 'currency': self.env.company.currency_id, 'operations': lines, } - return self.env.ref('mrp.report_mrp_operation_line').render({'data': values}) + return self.env.ref('mrp.report_mrp_operation_line')._render({'data': values}) @api.model def _get_report_data(self, bom_id, searchQty=0, searchVariant=False): diff --git a/addons/payment/models/payment_acquirer.py b/addons/payment/models/payment_acquirer.py index a2333b414e2..c529688356f 100644 --- a/addons/payment/models/payment_acquirer.py +++ b/addons/payment/models/payment_acquirer.py @@ -478,7 +478,7 @@ class PaymentAcquirer(models.Model): }) _logger.info('payment.acquirer.render: <%s> values rendered for form payment:\n%s', self.provider, pprint.pformat(values)) - return self.view_template_id.render(values, engine='ir.qweb') + return self.view_template_id._render(values, engine='ir.qweb') def get_s2s_form_xml_id(self): if self.registration_view_template_id: diff --git a/addons/payment_paypal/models/payment.py b/addons/payment_paypal/models/payment.py index d947c3a8c92..b0834681707 100644 --- a/addons/payment_paypal/models/payment.py +++ b/addons/payment_paypal/models/payment.py @@ -194,7 +194,7 @@ class TxPaypal(models.Model): if not self.acquirer_id.paypal_pdt_token and not self.acquirer_id.paypal_seller_account and status in ['Completed', 'Processed', 'Pending']: template = self.env.ref('payment_paypal.mail_template_paypal_invite_user_to_configure', False) if template: - render_template = template.render({ + render_template = template._render({ 'acquirer': self.acquirer_id, }, engine='ir.qweb') mail_body = self.env['mail.render.mixin']._replace_local_links(render_template) diff --git a/addons/point_of_sale/controllers/main.py b/addons/point_of_sale/controllers/main.py index 34788618ea8..afb44c4ba9c 100644 --- a/addons/point_of_sale/controllers/main.py +++ b/addons/point_of_sale/controllers/main.py @@ -61,6 +61,6 @@ class PosController(http.Controller): @http.route('/pos/sale_details_report', type='http', auth='user') def print_sale_details(self, date_start=False, date_stop=False, **kw): r = request.env['report.point_of_sale.report_saledetails'] - pdf, _ = request.env.ref('point_of_sale.sale_details_report').with_context(date_start=date_start, date_stop=date_stop).render_qweb_pdf(r) + pdf, _ = request.env.ref('point_of_sale.sale_details_report').with_context(date_start=date_start, date_stop=date_stop)._render_qweb_pdf(r) pdfhttpheaders = [('Content-Type', 'application/pdf'), ('Content-Length', len(pdf))] return request.make_response(pdf, headers=pdfhttpheaders) diff --git a/addons/point_of_sale/models/pos_config.py b/addons/point_of_sale/models/pos_config.py index 3dca7adf993..b882ef5ff4c 100644 --- a/addons/point_of_sale/models/pos_config.py +++ b/addons/point_of_sale/models/pos_config.py @@ -99,7 +99,7 @@ class PosConfig(models.Model): def _compute_customer_html(self): for config in self: - config.customer_facing_display_html = self.env['ir.qweb'].render('point_of_sale.customer_facing_display_html') + config.customer_facing_display_html = self.env['ir.qweb']._render('point_of_sale.customer_facing_display_html') name = fields.Char(string='Point of Sale', index=True, required=True, help="An internal identification of the point of sale.") is_installed_account_accountant = fields.Boolean(string="Is the Full Accounting Installed", diff --git a/addons/point_of_sale/models/pos_order.py b/addons/point_of_sale/models/pos_order.py index 736a8eb72d1..085ba223a04 100644 --- a/addons/point_of_sale/models/pos_order.py +++ b/addons/point_of_sale/models/pos_order.py @@ -542,7 +542,7 @@ class PosOrder(models.Model): } if self.mapped('account_move'): - report = self.env.ref('point_of_sale.pos_invoice_report').render_qweb_pdf(self.ids[0]) + report = self.env.ref('point_of_sale.pos_invoice_report')._render_qweb_pdf(self.ids[0]) filename = name + '.pdf' attachment = self.env['ir.attachment'].create({ 'name': filename, diff --git a/addons/portal/controllers/portal.py b/addons/portal/controllers/portal.py index 74137213769..6bec53e7f74 100644 --- a/addons/portal/controllers/portal.py +++ b/addons/portal/controllers/portal.py @@ -371,7 +371,7 @@ class CustomerPortal(Controller): if not isinstance(report_sudo, type(request.env['ir.actions.report'])): raise UserError(_("%s is not the reference of a report") % report_ref) - method_name = 'render_qweb_%s' % (report_type) + method_name = '_render_qweb_%s' % (report_type) report = getattr(report_sudo, method_name)([model.id], data={'report_type': report_type})[0] reporthttpheaders = [ ('Content-Type', 'application/pdf' if report_type == 'pdf' else 'text/html'), diff --git a/addons/pos_mercury/models/pos_mercury_transaction.py b/addons/pos_mercury/models/pos_mercury_transaction.py index 48ff5e18560..bb538285ecb 100644 --- a/addons/pos_mercury/models/pos_mercury_transaction.py +++ b/addons/pos_mercury/models/pos_mercury_transaction.py @@ -46,7 +46,7 @@ class MercuryTransaction(models.Model): data['memo'] = "Odoo " + service.common.exp_version()['server_version'] def _do_request(self, template, data): - xml_transaction = self.env.ref(template).render(data).decode() + xml_transaction = self.env.ref(template)._render(data).decode() if not data['merchant_id'] or not data['merchant_pwd']: return "not setup" diff --git a/addons/product/report/product_pricelist_report.py b/addons/product/report/product_pricelist_report.py index 41a9a15eb2c..9a0e1ba7148 100644 --- a/addons/product/report/product_pricelist_report.py +++ b/addons/product/report/product_pricelist_report.py @@ -22,7 +22,7 @@ class report_product_pricelist(models.AbstractModel): self.env.context.get('pricelist_id'), self.env.context.get('quantities') or [1] ) - return self.env.ref('product.report_pricelist_page').render(render_values) + return self.env.ref('product.report_pricelist_page')._render(render_values) def _get_report_data(self, active_model, active_ids, pricelist_id, quantities, report_type='html'): products = [] diff --git a/addons/purchase_stock/models/purchase.py b/addons/purchase_stock/models/purchase.py index 4e1723fa8a7..2651107d036 100644 --- a/addons/purchase_stock/models/purchase.py +++ b/addons/purchase_stock/models/purchase.py @@ -185,7 +185,7 @@ class PurchaseOrder(models.Model): 'order_exceptions': order_exceptions.values(), 'impacted_pickings': impacted_pickings, } - return self.env.ref('purchase_stock.exception_on_po').render(values=values) + return self.env.ref('purchase_stock.exception_on_po')._render(values=values) documents = self.env['stock.picking']._log_activity_get_documents(purchase_order_lines_quantities, 'move_ids', 'DOWN', _keys_in_sorted, _keys_in_groupby) filtered_documents = {} diff --git a/addons/rating/controllers/main.py b/addons/rating/controllers/main.py index a35f1af8662..a80d131baa3 100644 --- a/addons/rating/controllers/main.py +++ b/addons/rating/controllers/main.py @@ -45,7 +45,7 @@ class Rating(http.Controller): } rating.write({'rating': rate, 'consumed': True}) lang = rating.partner_id.lang or get_lang(request.env).code - return request.env['ir.ui.view'].with_context(lang=lang).render_template('rating.rating_external_page_submit', { + return request.env['ir.ui.view'].with_context(lang=lang)._render_template('rating.rating_external_page_submit', { 'rating': rating, 'token': token, 'rate_names': rate_names, 'rate': rate }) @@ -60,7 +60,7 @@ class Rating(http.Controller): record_sudo = request.env[rating.res_model].sudo().browse(rating.res_id) record_sudo.rating_apply(rate, token=token, feedback=kwargs.get('feedback')) lang = rating.partner_id.lang or get_lang(request.env).code - return request.env['ir.ui.view'].with_context(lang=lang).render_template('rating.rating_external_page_view', { + return request.env['ir.ui.view'].with_context(lang=lang)._render_template('rating.rating_external_page_view', { 'web_base_url': request.env['ir.config_parameter'].sudo().get_param('web.base.url'), 'rating': rating, }) diff --git a/addons/sale/controllers/onboarding.py b/addons/sale/controllers/onboarding.py index 1d62325f669..8b54c0d3b23 100644 --- a/addons/sale/controllers/onboarding.py +++ b/addons/sale/controllers/onboarding.py @@ -19,7 +19,7 @@ class OnboardingController(http.Controller): return {} return { - 'html': request.env.ref('sale.sale_quotation_onboarding_panel').render({ + 'html': request.env.ref('sale.sale_quotation_onboarding_panel')._render({ 'company': company, 'state': company.get_and_update_sale_quotation_onboarding_state() }) diff --git a/addons/sale/controllers/portal.py b/addons/sale/controllers/portal.py index a716bdceb79..40e854af7c5 100644 --- a/addons/sale/controllers/portal.py +++ b/addons/sale/controllers/portal.py @@ -231,7 +231,7 @@ class CustomerPortal(CustomerPortal): order_sudo.action_confirm() order_sudo._send_order_confirmation_mail() - pdf = request.env.ref('sale.action_report_saleorder').sudo().render_qweb_pdf([order_sudo.id])[0] + pdf = request.env.ref('sale.action_report_saleorder').sudo()._render_qweb_pdf([order_sudo.id])[0] _message_post_helper( 'sale.order', order_sudo.id, _('Order signed by %s') % (name,), diff --git a/addons/sale_management/controllers/portal.py b/addons/sale_management/controllers/portal.py index a2690237709..da3c3bbcc23 100644 --- a/addons/sale_management/controllers/portal.py +++ b/addons/sale_management/controllers/portal.py @@ -28,7 +28,7 @@ class CustomerPortal(CustomerPortal): 'order_line_price_subtotal': format_price(order_line.price_subtotal) }) try: - results['order_totals_table'] = request.env['ir.ui.view'].render_template('sale.sale_order_portal_content_totals_table', {'sale_order': order_sudo}) + results['order_totals_table'] = request.env['ir.ui.view']._render_template('sale.sale_order_portal_content_totals_table', {'sale_order': order_sudo}) except ValueError: pass @@ -58,7 +58,7 @@ class CustomerPortal(CustomerPortal): results = self._get_portal_order_details(order_sudo) results.update({ 'unlink': True, - 'sale_template': request.env['ir.ui.view'].render_template('sale.sale_order_portal_content', { + 'sale_template': request.env['ir.ui.view']._render_template('sale.sale_order_portal_content', { 'sale_order': order_sudo, 'report_type': "html" }), @@ -84,7 +84,7 @@ class CustomerPortal(CustomerPortal): option_sudo.add_option_to_order() results = self._get_portal_order_details(order_sudo) - results['sale_template'] = request.env['ir.ui.view'].render_template("sale.sale_order_portal_content", { + results['sale_template'] = request.env['ir.ui.view']._render_template("sale.sale_order_portal_content", { 'sale_order': option_sudo.order_id, 'report_type': "html" }) diff --git a/addons/sale_product_configurator/controllers/main.py b/addons/sale_product_configurator/controllers/main.py index 9717b302dcf..d207d41694e 100644 --- a/addons/sale_product_configurator/controllers/main.py +++ b/addons/sale_product_configurator/controllers/main.py @@ -21,7 +21,7 @@ class ProductConfiguratorController(http.Controller): if pricelist: product_template = product_template.with_context(pricelist=pricelist.id, partner=request.env.user.partner_id) - return request.env['ir.ui.view'].render_template("sale_product_configurator.configure", { + return request.env['ir.ui.view']._render_template("sale_product_configurator.configure", { 'product': product_template, 'pricelist': pricelist, 'add_qty': add_qty, @@ -48,7 +48,7 @@ class ProductConfiguratorController(http.Controller): # They are kept in the context since they are not linked to this product variant parent_combination |= product.env.context.get('no_variant_attribute_values') - return request.env['ir.ui.view'].render_template("sale_product_configurator.optional_product_items", { + return request.env['ir.ui.view']._render_template("sale_product_configurator.optional_product_items", { 'product': product, 'parent_name': product.name, 'parent_combination': parent_combination, @@ -72,7 +72,7 @@ class ProductConfiguratorController(http.Controller): if no_variant_attribute_values: product = product.with_context(no_variant_attribute_values=no_variant_attribute_values) - return request.env['ir.ui.view'].render_template("sale_product_configurator.optional_products_modal", { + return request.env['ir.ui.view']._render_template("sale_product_configurator.optional_products_modal", { 'product': product, 'combination': combination, 'add_qty': add_qty, diff --git a/addons/sale_purchase/models/purchase_order.py b/addons/sale_purchase/models/purchase_order.py index 8684912c7fc..3da5b6c6b2c 100644 --- a/addons/sale_purchase/models/purchase_order.py +++ b/addons/sale_purchase/models/purchase_order.py @@ -58,7 +58,7 @@ class PurchaseOrder(models.Model): sale_to_notify_map[sale_order] |= purchase_line for sale_order, purchase_order_lines in sale_to_notify_map.items(): - sale_order.activity_schedule_with_view('mail.mail_activity_data_warning', + sale_order._activity_schedule_with_view('mail.mail_activity_data_warning', user_id=sale_order.user_id.id or self.env.uid, views_or_xmlid='sale_purchase.exception_sale_on_purchase_cancellation', render_context={ diff --git a/addons/sale_purchase/models/sale_order.py b/addons/sale_purchase/models/sale_order.py index dc645a7830a..bfed4ae42cc 100644 --- a/addons/sale_purchase/models/sale_order.py +++ b/addons/sale_purchase/models/sale_order.py @@ -70,7 +70,7 @@ class SaleOrder(models.Model): purchase_to_notify_map[purchase_line.order_id] |= purchase_line.sale_line_id for purchase_order, sale_order_lines in purchase_to_notify_map.items(): - purchase_order.activity_schedule_with_view('mail.mail_activity_data_warning', + purchase_order._activity_schedule_with_view('mail.mail_activity_data_warning', user_id=purchase_order.user_id.id or self.env.uid, views_or_xmlid='sale_purchase.exception_purchase_on_sale_cancellation', render_context={ @@ -161,7 +161,7 @@ class SaleOrderLine(models.Model): 'sale_orders': sale_lines.mapped('order_id'), 'origin_values': origin_values, } - purchase_order.activity_schedule_with_view('mail.mail_activity_data_warning', + purchase_order._activity_schedule_with_view('mail.mail_activity_data_warning', user_id=purchase_order.user_id.id or self.env.uid, views_or_xmlid='sale_purchase.exception_purchase_on_sale_quantity_decreased', render_context=render_context) diff --git a/addons/sale_stock/controllers/portal.py b/addons/sale_stock/controllers/portal.py index 999b12a1d6b..7eec8e26d0b 100644 --- a/addons/sale_stock/controllers/portal.py +++ b/addons/sale_stock/controllers/portal.py @@ -30,7 +30,7 @@ class SaleStockPortal(CustomerPortal): return request.redirect('/my') # print report as sudo, since it require access to product, taxes, payment term etc.. and portal does not have those access rights. - pdf = request.env.ref('stock.action_report_delivery').sudo().render_qweb_pdf([picking_sudo.id])[0] + pdf = request.env.ref('stock.action_report_delivery').sudo()._render_qweb_pdf([picking_sudo.id])[0] pdfhttpheaders = [ ('Content-Type', 'application/pdf'), ('Content-Length', len(pdf)), diff --git a/addons/sale_stock/models/sale_order.py b/addons/sale_stock/models/sale_order.py index 4b9839c0632..8ead12b9f79 100644 --- a/addons/sale_stock/models/sale_order.py +++ b/addons/sale_stock/models/sale_order.py @@ -239,7 +239,7 @@ class SaleOrder(models.Model): 'impacted_pickings': impacted_pickings, 'cancel': cancel } - return self.env.ref('sale_stock.exception_on_so').render(values=values) + return self.env.ref('sale_stock.exception_on_so')._render(values=values) self.env['stock.picking']._log_activity(_render_note_exception_quantity_so, documents) diff --git a/addons/sale_stock/models/stock.py b/addons/sale_stock/models/stock.py index 7b1b9ee56a2..9b679944502 100644 --- a/addons/sale_stock/models/stock.py +++ b/addons/sale_stock/models/stock.py @@ -104,7 +104,7 @@ class StockPicking(models.Model): 'origin_picking': origin_picking, 'moves_information': moves_information.values(), } - return self.env.ref('sale_stock.exception_on_picking').render(values=values) + return self.env.ref('sale_stock.exception_on_picking')._render(values=values) documents = self._log_activity_get_documents(moves, 'sale_line_id', 'DOWN', _keys_in_sorted, _keys_in_groupby) self._log_activity(_render_note_exception_quantity, documents) diff --git a/addons/snailmail/models/snailmail_letter.py b/addons/snailmail/models/snailmail_letter.py index 702f2d366ca..1afb157e420 100644 --- a/addons/snailmail/models/snailmail_letter.py +++ b/addons/snailmail/models/snailmail_letter.py @@ -130,7 +130,7 @@ class SnailmailLetter(models.Model): else: report_name = 'Document' filename = "%s.%s" % (report_name, "pdf") - pdf_bin, _ = report.with_context(snailmail_layout=not self.cover).render_qweb_pdf(self.res_id) + pdf_bin, _ = report.with_context(snailmail_layout=not self.cover)._render_qweb_pdf(self.res_id) attachment = self.env['ir.attachment'].create({ 'name': filename, 'datas': base64.b64encode(pdf_bin), diff --git a/addons/stock/models/stock_picking.py b/addons/stock/models/stock_picking.py index 12da2dd4902..c4cbdf52e4d 100644 --- a/addons/stock/models/stock_picking.py +++ b/addons/stock/models/stock_picking.py @@ -1163,7 +1163,7 @@ class Picking(models.Model): 'moves_information': rendering_context.values(), 'impacted_pickings': impacted_pickings, } - return self.env.ref('stock.exception_on_picking').render(values=values) + return self.env.ref('stock.exception_on_picking')._render(values=values) documents = self._log_activity_get_documents(moves, 'move_dest_ids', 'DOWN', _keys_in_sorted, _keys_in_groupby) documents = self._less_quantities_than_expected_add_documents(moves, documents) @@ -1329,7 +1329,7 @@ class Picking(models.Model): def _attach_sign(self): """ Render the delivery report in pdf and attach it to the picking in `self`. """ self.ensure_one() - report = self.env.ref('stock.action_report_delivery').render_qweb_pdf(self.id) + report = self.env.ref('stock.action_report_delivery')._render_qweb_pdf(self.id) filename = "%s_signed_delivery_slip" % self.name if self.partner_id: message = _('Order signed by %s') % (self.partner_id.name) diff --git a/addons/stock/report/stock_traceability.py b/addons/stock/report/stock_traceability.py index dbc29ff0891..553127505dd 100644 --- a/addons/stock/report/stock_traceability.py +++ b/addons/stock/report/stock_traceability.py @@ -212,13 +212,13 @@ class MrpStockReport(models.TransientModel): if not config['test_enable']: context['commit_assetsbundle'] = True - body = self.env['ir.ui.view'].with_context(context).render_template( + body = self.env['ir.ui.view'].with_context(context)._render_template( "stock.report_stock_inventory_print", values=dict(rcontext, lines=lines, report=self, context=self), ) - header = self.env['ir.actions.report'].render_template("web.internal_layout", values=rcontext) - header = self.env['ir.actions.report'].render_template("web.minimal_layout", values=dict(rcontext, subst=True, body=header)) + header = self.env['ir.actions.report']._render_template("web.internal_layout", values=rcontext) + header = self.env['ir.actions.report']._render_template("web.minimal_layout", values=dict(rcontext, subst=True, body=header)) return self.env['ir.actions.report']._run_wkhtmltopdf( [body], @@ -232,7 +232,7 @@ class MrpStockReport(models.TransientModel): rcontext = {} context = dict(self.env.context) rcontext['lines'] = self.with_context(context).get_lines() - result['html'] = self.env.ref('stock.report_stock_inventory').render(rcontext) + result['html'] = self.env.ref('stock.report_stock_inventory')._render(rcontext) return result @api.model diff --git a/addons/stock/tests/test_report.py b/addons/stock/tests/test_report.py index 9acac53a2a3..bdd7f7ee3f6 100644 --- a/addons/stock/tests/test_report.py +++ b/addons/stock/tests/test_report.py @@ -24,7 +24,7 @@ class TestReports(TransactionCase): report = self.env.ref('stock.label_lot_template') target = b'\n\n\n^XA\n^FO100,50\n^A0N,44,33^FD[C418]Mellohi^FS\n^FO100,100\n^A0N,44,33^FDLN/SN:Volume-Beta^FS\n^FO100,150^BY3\n^BCN,100,Y,N,N\n^FDVolume-Beta^FS\n^XZ\n\n\n' - rendering, qweb_type = report.render_qweb_text(lot1.id) + rendering, qweb_type = report._render_qweb_text(lot1.id) self.assertEqual(target, rendering.replace(b' ', b''), 'The rendering is not good') self.assertEqual(qweb_type, 'text', 'the report type is not good') diff --git a/addons/survey/controllers/main.py b/addons/survey/controllers/main.py index 0d0a32ee9a2..b55ea0e1277 100644 --- a/addons/survey/controllers/main.py +++ b/addons/survey/controllers/main.py @@ -318,22 +318,22 @@ class Survey(http.Controller): survey_content = False if answer_sudo.state == 'done': - survey_content = request.env.ref('survey.survey_fill_form_done').render(survey_data) + survey_content = request.env.ref('survey.survey_fill_form_done')._render(survey_data) else: - survey_content = request.env.ref('survey.survey_fill_form_in_progress').render(survey_data) + survey_content = request.env.ref('survey.survey_fill_form_in_progress')._render(survey_data) survey_progress = False if answer_sudo.state == 'in_progress' and not survey_data.get('question', request.env['survey.question']).is_page: if survey_sudo.questions_layout == 'page_per_section': page_ids = survey_sudo.page_ids.ids - survey_progress = request.env.ref('survey.survey_progression').render({ + survey_progress = request.env.ref('survey.survey_progression')._render({ 'survey': survey_sudo, 'page_ids': page_ids, 'page_number': page_ids.index(survey_data['page'].id) + (1 if survey_sudo.progression_mode == 'number' else 0) }) elif survey_sudo.questions_layout == 'page_per_question': page_ids = survey_sudo.question_ids.ids - survey_progress = request.env.ref('survey.survey_progression').render({ + survey_progress = request.env.ref('survey.survey_progression')._render({ 'survey': survey_sudo, 'page_ids': page_ids, 'page_number': page_ids.index(survey_data['question'].id) @@ -342,7 +342,7 @@ class Survey(http.Controller): return { 'survey_content': survey_content, 'survey_progress': survey_progress, - 'survey_navigation': request.env.ref('survey.survey_navigation').render(survey_data), + 'survey_navigation': request.env.ref('survey.survey_navigation')._render(survey_data), } @http.route('/survey/<string:survey_token>/<string:answer_token>', type='http', auth='public', website=True) @@ -629,7 +629,7 @@ class Survey(http.Controller): return request.render('survey.survey_page_statistics', template_values) def _generate_report(self, user_input, download=True): - report = request.env.ref('survey.certification_report').sudo().render_qweb_pdf([user_input.id], data={'report_type': 'pdf'})[0] + report = request.env.ref('survey.certification_report').sudo()._render_qweb_pdf([user_input.id], data={'report_type': 'pdf'})[0] report_content_disposition = content_disposition('Certification.pdf') if not download: diff --git a/addons/survey/controllers/survey_session_manage.py b/addons/survey/controllers/survey_session_manage.py index e81626ce95b..090df323908 100644 --- a/addons/survey/controllers/survey_session_manage.py +++ b/addons/survey/controllers/survey_session_manage.py @@ -108,7 +108,7 @@ class UserInputSession(http.Controller): template_values = self._prepare_manage_session_values(survey) template_values['is_rpc_call'] = True - return request.env.ref('survey.user_input_session_manage_content').render(template_values) + return request.env.ref('survey.user_input_session_manage_content')._render(template_values) else: return False @@ -146,7 +146,7 @@ class UserInputSession(http.Controller): # no open session return '' - return request.env.ref('survey.user_input_session_leaderboard').render({ + return request.env.ref('survey.user_input_session_leaderboard')._render({ 'animate_width': True, 'leaderboard': survey._prepare_leaderboard_values() }) diff --git a/addons/survey/wizard/survey_invite.py b/addons/survey/wizard/survey_invite.py index b9c6759f246..0a8fba4f6af 100644 --- a/addons/survey/wizard/survey_invite.py +++ b/addons/survey/wizard/survey_invite.py @@ -234,7 +234,7 @@ class SurveyInvite(models.TransientModel): 'model_description': self.env['ir.model']._get('survey.survey').display_name, 'company': self.env.company, } - body = template.render(template_ctx, engine='ir.qweb', minimal_qcontext=True) + body = template._render(template_ctx, engine='ir.qweb', minimal_qcontext=True) mail_values['body_html'] = self.env['mail.render.mixin']._replace_local_links(body) return self.env['mail.mail'].sudo().create(mail_values) diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py index c68966af4bc..971181d14a1 100644 --- a/addons/web/controllers/main.py +++ b/addons/web/controllers/main.py @@ -1974,14 +1974,14 @@ class ReportController(http.Controller): del data['context']['lang'] context.update(data['context']) if converter == 'html': - html = report.with_context(context).render_qweb_html(docids, data=data)[0] + html = report.with_context(context)._render_qweb_html(docids, data=data)[0] return request.make_response(html) elif converter == 'pdf': - pdf = report.with_context(context).render_qweb_pdf(docids, data=data)[0] + pdf = report.with_context(context)._render_qweb_pdf(docids, data=data)[0] pdfhttpheaders = [('Content-Type', 'application/pdf'), ('Content-Length', len(pdf))] return request.make_response(pdf, headers=pdfhttpheaders) elif converter == 'text': - text = report.with_context(context).render_qweb_text(docids, data=data)[0] + text = report.with_context(context)._render_qweb_text(docids, data=data)[0] texthttpheaders = [('Content-Type', 'text/plain'), ('Content-Length', len(text))] return request.make_response(text, headers=texthttpheaders) else: diff --git a/addons/web/models/models.py b/addons/web/models/models.py index 2e8d63b55be..348fecb8cb1 100644 --- a/addons/web/models/models.py +++ b/addons/web/models/models.py @@ -192,7 +192,7 @@ class Base(models.AbstractModel): @api.model def qweb_render_view(self, view_id, domain): assert view_id - return self.env['ir.qweb'].render( + return self.env['ir.qweb']._render( view_id, { **self.env['ir.ui.view']._prepare_qcontext(), **self._qweb_prepare_qcontext(view_id, domain), @@ -526,7 +526,7 @@ class ResCompany(models.Model): # One bundle for everyone, so this method # necessarily updates the style for every company at once company_ids = self.sudo().search([]) - company_styles = template_style.render({ + company_styles = template_style._render({ 'company_ids': company_ids, }) return base64.b64encode((company_styles)) diff --git a/addons/web/static/src/js/core/ajax.js b/addons/web/static/src/js/core/ajax.js index 21a0cbdc0fc..ae3194e2a45 100644 --- a/addons/web/static/src/js/core/ajax.js +++ b/addons/web/static/src/js/core/ajax.js @@ -456,7 +456,7 @@ var loadAsset = (function () { if (tplRoute === '/web/dataset/call_kw/') { Object.assign(params, { model: 'ir.ui.view', - method: 'render_template', + method: 'render_public_asset', }); } cache[xmlId] = rpc(tplRoute, params).then(function (xml) { diff --git a/addons/web_editor/controllers/main.py b/addons/web_editor/controllers/main.py index 488c203d35f..cd8ade0f108 100644 --- a/addons/web_editor/controllers/main.py +++ b/addons/web_editor/controllers/main.py @@ -476,4 +476,4 @@ class Web_Editor(http.Controller): if request.env.user._is_public() \ and xmlid in request.env['web_editor.assets']._get_public_asset_xmlids(): View = View.sudo() - return View.render_template(xmlid, {k: values[k] for k in values if k in trusted_value_keys}) + return View._render_template(xmlid, {k: values[k] for k in values if k in trusted_value_keys}) diff --git a/addons/web_editor/models/ir_ui_view.py b/addons/web_editor/models/ir_ui_view.py index 1e47c1800f9..c56fdadbb6e 100644 --- a/addons/web_editor/models/ir_ui_view.py +++ b/addons/web_editor/models/ir_ui_view.py @@ -15,7 +15,7 @@ _logger = logging.getLogger(__name__) class IrUiView(models.Model): _inherit = 'ir.ui.view' - def render(self, values=None, engine='ir.qweb', minimal_qcontext=False): + def _render(self, values=None, engine='ir.qweb', minimal_qcontext=False): if values and values.get('editable'): try: self.check_access_rights('write') @@ -23,7 +23,7 @@ class IrUiView(models.Model): except AccessError: values['editable'] = False - return super(IrUiView, self).render(values=values, engine=engine, minimal_qcontext=minimal_qcontext) + return super(IrUiView, self)._render(values=values, engine=engine, minimal_qcontext=minimal_qcontext) #------------------------------------------------------ # Save from html diff --git a/addons/web_editor/static/src/js/editor/snippets.editor.js b/addons/web_editor/static/src/js/editor/snippets.editor.js index 69baddaefe4..9b0b5ed2e7f 100644 --- a/addons/web_editor/static/src/js/editor/snippets.editor.js +++ b/addons/web_editor/static/src/js/editor/snippets.editor.js @@ -1034,7 +1034,7 @@ var SnippetsMenu = Widget.extend({ } this._defLoadSnippets = this._rpc({ model: 'ir.ui.view', - method: 'render_template', + method: 'render_public_asset', args: [this.options.snippets, {}], kwargs: { context: this.options.context, diff --git a/addons/web_editor/static/tests/test_utils.js b/addons/web_editor/static/tests/test_utils.js index fcbf52f2521..b8dd9040fc7 100644 --- a/addons/web_editor/static/tests/test_utils.js +++ b/addons/web_editor/static/tests/test_utils.js @@ -98,7 +98,7 @@ MockServer.include({ if (args.method === 'read_template' && args.args[0] === "web_editor.colorpicker") { return COLOR_PICKER_TEMPLATE; } - if (args.method === 'render_template' && args.args[0] === "web_editor.snippets") { + if (args.method === 'render_public_asset' && args.args[0] === "web_editor.snippets") { return SNIPPETS_TEMPLATE; } } diff --git a/addons/web_editor/tests/test_converter.py b/addons/web_editor/tests/test_converter.py index 724b464368b..3d9259ba5b5 100644 --- a/addons/web_editor/tests/test_converter.py +++ b/addons/web_editor/tests/test_converter.py @@ -129,7 +129,7 @@ class TestConvertBack(common.TransactionCase): field_value = 'record.%s' % field e.set('t-field', field_value) - rendered = self.env['ir.qweb'].render(t, {'record': record}) + rendered = self.env['ir.qweb']._render(t, {'record': record}) element = html.fromstring(rendered, parser=html.HTMLParser(encoding='utf-8')) model = 'ir.qweb.field.' + element.get('data-oe-type', '') @@ -197,7 +197,7 @@ class TestConvertBack(common.TransactionCase): field_value = 'record.%s' % field e.set('t-field', field_value) - rendered = self.env['ir.qweb'].render(t, {'record': record}) + rendered = self.env['ir.qweb']._render(t, {'record': record}) element = html.fromstring(rendered, parser=html.HTMLParser(encoding='utf-8')) # emulate edition diff --git a/addons/website/controllers/main.py b/addons/website/controllers/main.py index 93d44718b9b..bbbb0c5960b 100644 --- a/addons/website/controllers/main.py +++ b/addons/website/controllers/main.py @@ -167,15 +167,15 @@ class Website(Home): sitemaps.unlink() pages = 0 - locs = request.website.with_user(request.website.user_id).enumerate_pages() + locs = request.website.with_user(request.website.user_id)._enumerate_pages() while True: values = { 'locs': islice(locs, 0, LOC_PER_SITEMAP), 'url_root': request.httprequest.url_root[:-1], } - urls = View.render_template('website.sitemap_locs', values) + urls = View._render_template('website.sitemap_locs', values) if urls.strip(): - content = View.render_template('website.sitemap_xml', {'content': urls}) + content = View._render_template('website.sitemap_xml', {'content': urls}) pages += 1 last_sitemap = create_sitemap('/sitemap-%d-%d.xml' % (current_website.id, pages), content) else: @@ -194,7 +194,7 @@ class Website(Home): pages_with_website = ["%d-%d" % (current_website.id, p) for p in range(1, pages + 1)] # Sitemaps must be split in several smaller files with a sitemap index - content = View.render_template('website.sitemap_index_xml', { + content = View._render_template('website.sitemap_index_xml', { 'pages': pages_with_website, 'url_root': request.httprequest.url_root, }) @@ -238,7 +238,7 @@ class Website(Home): matching_urls = set(map(lambda match: match['value'], matching_pages)) matching_last_modified = [] - last_modified_pages = current_website.get_website_pages(order='write_date desc', limit=5) + last_modified_pages = current_website._get_website_pages(order='write_date desc', limit=5) for url, name in last_modified_pages.mapped(lambda p: (p.url, p.name)): if needle.lower() in name.lower() or needle.lower() in url.lower() and url not in matching_urls: matching_last_modified.append({ @@ -474,7 +474,7 @@ class Website(Home): View = request.env['ir.ui.view'] res = {} for id_or_xml_id in ids_or_xml_ids: - res[id_or_xml_id] = View.render_template(id_or_xml_id, values) + res[id_or_xml_id] = View._render_template(id_or_xml_id, values) return res @http.route(['/website/update_visitor_timezone'], type='json', auth="public", website=True) diff --git a/addons/website/models/ir_http.py b/addons/website/models/ir_http.py index 2e6aa532f88..25826241f2b 100644 --- a/addons/website/models/ir_http.py +++ b/addons/website/models/ir_http.py @@ -323,7 +323,7 @@ class Http(models.AbstractModel): @classmethod def _get_error_html(cls, env, code, values): if code in ('page_404', 'protected_403'): - return code.split('_')[1], env['ir.ui.view'].render_template('website.%s' % code, values) + return code.split('_')[1], env['ir.ui.view']._render_template('website.%s' % code, values) return super(Http, cls)._get_error_html(env, code, values) def binary_content(self, xmlid=None, model='ir.attachment', id=None, field='datas', diff --git a/addons/website/models/ir_ui_view.py b/addons/website/models/ir_ui_view.py index 12d2831c0d8..8fa24631d26 100644 --- a/addons/website/models/ir_ui_view.py +++ b/addons/website/models/ir_ui_view.py @@ -384,7 +384,7 @@ class View(models.Model): return False return True - def render(self, values=None, engine='ir.qweb', minimal_qcontext=False): + def _render(self, values=None, engine='ir.qweb', minimal_qcontext=False): """ Render the template. If website is enabled on request, then extend rendering context with website values. """ self._handle_visibility(do_raise=True) new_context = dict(self._context) @@ -411,7 +411,7 @@ class View(models.Model): if self._context != new_context: self = self.with_context(new_context) - return super(View, self).render(values, engine=engine, minimal_qcontext=minimal_qcontext) + return super(View, self)._render(values, engine=engine, minimal_qcontext=minimal_qcontext) @api.model def _prepare_qcontext(self): diff --git a/addons/website/models/website.py b/addons/website/models/website.py index c0c65070311..e6c86ed3f3f 100644 --- a/addons/website/models/website.py +++ b/addons/website/models/website.py @@ -760,7 +760,7 @@ class Website(models.Model): return all(p.name in rule._converters for p in params if p.kind in supported_kinds and has_no_default(p)) - def enumerate_pages(self, query_string=None, force=False): + def _enumerate_pages(self, query_string=None, force=False): """ Available pages in the website/CMS. This is mostly used for links generation and can be overridden by modules setting up new HTML controllers for dynamic pages (e.g. blog). @@ -850,7 +850,7 @@ class Website(models.Model): if query_string: domain += [('url', 'like', query_string)] - pages = self.get_website_pages(domain) + pages = self._get_website_pages(domain) for page in pages: record = {'loc': page['url'], 'id': page['id'], 'name': page['name']} @@ -860,7 +860,7 @@ class Website(models.Model): record['lastmod'] = page['write_date'].date() yield record - def get_website_pages(self, domain=[], order='name', limit=None): + def _get_website_pages(self, domain=[], order='name', limit=None): domain += self.get_current_website().website_domain() pages = self.env['website.page'].sudo().search(domain, order=order, limit=limit) return pages @@ -868,7 +868,7 @@ class Website(models.Model): def search_pages(self, needle=None, limit=None): name = slugify(needle, max_length=50, path=True) res = [] - for page in self.enumerate_pages(query_string=name, force=True): + for page in self._enumerate_pages(query_string=name, force=True): res.append(page) if len(res) == limit: break diff --git a/addons/website/models/website_menu.py b/addons/website/models/website_menu.py index 74117b11711..afd728ca9b0 100644 --- a/addons/website/models/website_menu.py +++ b/addons/website/models/website_menu.py @@ -25,7 +25,7 @@ class Menu(models.Model): for menu in self: if menu.is_mega_menu: if not menu.mega_menu_content: - default_content = self.env['ir.ui.view'].render_template('website.s_mega_menu_multi_menus') + default_content = self.env['ir.ui.view']._render_template('website.s_mega_menu_multi_menus') menu.mega_menu_content = default_content.decode() else: menu.mega_menu_content = False diff --git a/addons/website/tests/test_qweb.py b/addons/website/tests/test_qweb.py index 99f53078310..7b7d08ded8d 100644 --- a/addons/website/tests/test_qweb.py +++ b/addons/website/tests/test_qweb.py @@ -32,7 +32,7 @@ class TestQweb(TransactionCaseWithUserDemo): demo_env = self.env(user=demo) - html = demo_env['ir.qweb'].render('website.test_template', {"user": demo}, website_id= website.id) + html = demo_env['ir.qweb']._render('website.test_template', {"user": demo}, website_id= website.id) html = html.strip().decode('utf8') html = re.sub(r'\?unique=[^"]+', '', html).encode('utf8') diff --git a/addons/website/tests/test_views.py b/addons/website/tests/test_views.py index 9f19cdcc303..c662416756c 100644 --- a/addons/website/tests/test_views.py +++ b/addons/website/tests/test_views.py @@ -204,7 +204,7 @@ class TestViewSaving(common.TransactionCase): ) self.assertIn( replacement, - view.render().decode('utf-8'), + view._render().decode('utf-8'), 'inline script should not be escaped when rendering' ) # common text nodes should be be escaped client side @@ -213,7 +213,7 @@ class TestViewSaving(common.TransactionCase): self.assertIn(replacement, view.arch, 'common text node should not be escaped server side') self.assertIn( replacement, - view.render().decode('utf-8').replace(u'&', u'&'), + view._render().decode('utf-8').replace(u'&', u'&'), 'text node characters wrongly unescaped when rendering' ) diff --git a/addons/website_blog/controllers/main.py b/addons/website_blog/controllers/main.py index 3e9108bd1a0..0901a22d8ec 100644 --- a/addons/website_blog/controllers/main.py +++ b/addons/website_blog/controllers/main.py @@ -299,4 +299,4 @@ class WebsiteBlog(http.Controller): if domain: dom = expression.AND([dom, domain]) posts = request.env['blog.post'].search(dom, limit=limit, order=order) - return request.website.viewref(template).render({'posts': posts}) + return request.website.viewref(template)._render({'posts': posts}) diff --git a/addons/website_event/controllers/main.py b/addons/website_event/controllers/main.py index 4b06a913fbe..48b6b19936c 100644 --- a/addons/website_event/controllers/main.py +++ b/addons/website_event/controllers/main.py @@ -258,7 +258,7 @@ class WebsiteEventController(http.Controller): "date": self.get_formated_date(event), "event": event, "url": event.website_url}) - return request.env['ir.ui.view'].render_template("website_event.country_events_list", result) + return request.env['ir.ui.view']._render_template("website_event.country_events_list", result) def _process_tickets_form(self, event, form_details): """ Process posted data about ticket order. Generic ticket are supported @@ -302,7 +302,7 @@ class WebsiteEventController(http.Controller): availability_check = False if not tickets: return False - return request.env['ir.ui.view'].render_template("website_event.registration_attendee_details", {'tickets': tickets, 'event': event, 'availability_check': availability_check}) + return request.env['ir.ui.view']._render_template("website_event.registration_attendee_details", {'tickets': tickets, 'event': event, 'availability_check': availability_check}) def _process_attendees_form(self, event, form_details): """ Process data posted from the attendee details form. diff --git a/addons/website_hr_recruitment/models/hr_recruitment.py b/addons/website_hr_recruitment/models/hr_recruitment.py index f03ab2e054a..b4a1e6acbc2 100644 --- a/addons/website_hr_recruitment/models/hr_recruitment.py +++ b/addons/website_hr_recruitment/models/hr_recruitment.py @@ -42,7 +42,7 @@ class Job(models.Model): def _get_default_website_description(self): default_description = self.env["ir.model.data"].xmlid_to_object("website_hr_recruitment.default_website_description") - return (default_description.render() if default_description else "") + return (default_description._render() if default_description else "") website_description = fields.Html('Website description', translate=html_translate, sanitize_attributes=False, default=_get_default_website_description, prefetch=False, sanitize_form=False) diff --git a/addons/website_mail_channel/controllers/main.py b/addons/website_mail_channel/controllers/main.py index 4e2747bbeff..2207794f363 100644 --- a/addons/website_mail_channel/controllers/main.py +++ b/addons/website_mail_channel/controllers/main.py @@ -203,7 +203,7 @@ class MailGroup(http.Controller): 'msg_more_count': message_count - self._replies_per_page, 'replies_per_page': self._replies_per_page, } - return request.env.ref('website_mail_channel.messages_short').render(values, engine='ir.qweb') + return request.env.ref('website_mail_channel.messages_short')._render(values, engine='ir.qweb') @http.route("/groups/<int:group_id>/get_alias_info", type='json', auth='public', website=True) def get_alias_info(self, group_id, **post): diff --git a/addons/website_mass_mailing/models/website_mass_mailing.py b/addons/website_mass_mailing/models/website_mass_mailing.py index fdad7c16bc2..bcf09212c3e 100644 --- a/addons/website_mass_mailing/models/website_mass_mailing.py +++ b/addons/website_mass_mailing/models/website_mass_mailing.py @@ -9,7 +9,7 @@ class MassMailingPopup(models.Model): _description = "Mailing list popup" def _default_popup_content(self): - return self.env['ir.ui.view'].render_template('website_mass_mailing.s_newsletter_block') + return self.env['ir.ui.view']._render_template('website_mass_mailing.s_newsletter_block') mailing_list_id = fields.Many2one('mailing.list') website_id = fields.Many2one('website') diff --git a/addons/website_sale/controllers/main.py b/addons/website_sale/controllers/main.py index 113e22e435c..ee86c8369fb 100644 --- a/addons/website_sale/controllers/main.py +++ b/addons/website_sale/controllers/main.py @@ -466,12 +466,12 @@ class WebsiteSale(http.Controller): if not display: return value - value['website_sale.cart_lines'] = request.env['ir.ui.view'].render_template("website_sale.cart_lines", { + value['website_sale.cart_lines'] = request.env['ir.ui.view']._render_template("website_sale.cart_lines", { 'website_sale_order': order, 'date': fields.Date.today(), 'suggested_products': order._cart_accessories() }) - value['website_sale.short_cart_summary'] = request.env['ir.ui.view'].render_template("website_sale.short_cart_summary", { + value['website_sale.short_cart_summary'] = request.env['ir.ui.view']._render_template("website_sale.short_cart_summary", { 'website_sale_order': order, }) return value @@ -960,7 +960,7 @@ class WebsiteSale(http.Controller): return { 'recall': order.get_portal_last_transaction().state == 'pending', - 'message': request.env['ir.ui.view'].render_template("website_sale.payment_confirmation_status", { + 'message': request.env['ir.ui.view']._render_template("website_sale.payment_confirmation_status", { 'order': order }) } @@ -1025,7 +1025,7 @@ class WebsiteSale(http.Controller): def print_saleorder(self, **kwargs): sale_order_id = request.session.get('sale_last_order_id') if sale_order_id: - pdf, _ = request.env.ref('sale.action_report_saleorder').sudo().render_qweb_pdf([sale_order_id]) + pdf, _ = request.env.ref('sale.action_report_saleorder').sudo()._render_qweb_pdf([sale_order_id]) pdfhttpheaders = [('Content-Type', 'application/pdf'), ('Content-Length', u'%s' % len(pdf))] return request.make_response(pdf, headers=pdfhttpheaders) else: @@ -1243,7 +1243,7 @@ class WebsiteSale(http.Controller): res_product.update(combination_info) res_product['price'] = FieldMonetary.value_to_html(res_product['price'], monetary_options) if rating: - res_product['rating'] = request.env["ir.ui.view"].render_template('portal_rating.rating_widget_stars_static', values={ + res_product['rating'] = request.env["ir.ui.view"]._render_template('portal_rating.rating_widget_stars_static', values={ 'rating_avg': product.rating_avg, 'rating_count': product.rating_count, }) diff --git a/addons/website_sale/controllers/variant.py b/addons/website_sale/controllers/variant.py index 76069d26bc5..158d2cf97e2 100644 --- a/addons/website_sale/controllers/variant.py +++ b/addons/website_sale/controllers/variant.py @@ -14,7 +14,7 @@ class WebsiteSaleVariantController(VariantController): kw.pop('pricelist_id') res = self.get_combination_info(product_template_id, product_id, combination, add_qty, request.website.get_current_pricelist(), **kw) - carousel_view = request.env['ir.ui.view'].render_template('website_sale.shop_product_carousel', + carousel_view = request.env['ir.ui.view']._render_template('website_sale.shop_product_carousel', values={ 'product': request.env['product.template'].browse(res['product_template_id']), 'product_variant': request.env['product.product'].browse(res['product_id']), diff --git a/addons/website_sale_comparison/controllers/main.py b/addons/website_sale_comparison/controllers/main.py index 68c9a73a415..4cd5cc4c9e4 100644 --- a/addons/website_sale_comparison/controllers/main.py +++ b/addons/website_sale_comparison/controllers/main.py @@ -30,7 +30,7 @@ class WebsiteSaleProductComparison(WebsiteSale): prods.mapped('name') for prod in prods: ret[prod.id] = { - 'render': request.env['ir.ui.view'].render_template( + 'render': request.env['ir.ui.view']._render_template( "website_sale_comparison.product_product", {'product': prod, 'website': request.website} ), diff --git a/addons/website_slides/controllers/main.py b/addons/website_slides/controllers/main.py index 385d7b572b1..1e896d3f754 100644 --- a/addons/website_slides/controllers/main.py +++ b/addons/website_slides/controllers/main.py @@ -858,7 +858,7 @@ class WebsiteSlides(WebsiteProfile): 'comment': answer['comment'] }) for answer in answer_ids] }) - return request.env.ref('website_slides.lesson_content_quiz_question').render({ + return request.env.ref('website_slides.lesson_content_quiz_question')._render({ 'slide': slide, 'question': slide_question, }) diff --git a/addons/website_slides/wizard/slide_channel_invite.py b/addons/website_slides/wizard/slide_channel_invite.py index 9650b4d2f9e..e5581a65da0 100644 --- a/addons/website_slides/wizard/slide_channel_invite.py +++ b/addons/website_slides/wizard/slide_channel_invite.py @@ -123,7 +123,7 @@ class SlideChannelInvite(models.TransientModel): 'model_description': self.env['ir.model']._get('website_slides.slide_channel').display_name, 'company': self.env.company, } - body = template.render(template_ctx, engine='ir.qweb', minimal_qcontext=True) + body = template._render(template_ctx, engine='ir.qweb', minimal_qcontext=True) mail_values['body_html'] = self.env['mail.render.mixin']._replace_local_links(body) return mail_values |
