From 2e6e2f59e58b8b9154f927e40a4755d786468df2 Mon Sep 17 00:00:00 2001 From: Gorash Date: Mon, 10 Jan 2022 10:55:20 +0000 Subject: [PATCH] [IMP] website: Save one sql for all images on published record The record is read directly in sudo, the prefetch is in the sudo environment. When reading the other information there is no longer any need to make a request. closes odoo/odoo#82475 Signed-off-by: Romain Derie (rde) --- addons/website/models/ir_http.py | 9 ++++++--- addons/website/tests/test_performance.py | 8 ++++++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/addons/website/models/ir_http.py b/addons/website/models/ir_http.py index 99b420f83fb..da65153ad7c 100644 --- a/addons/website/models/ir_http.py +++ b/addons/website/models/ir_http.py @@ -16,7 +16,7 @@ from functools import partial import odoo from odoo import api, models from odoo import registry, SUPERUSER_ID -from odoo.exceptions import AccessError +from odoo.exceptions import AccessError, MissingError from odoo.http import request from odoo.tools.safe_eval import safe_eval from odoo.osv.expression import FALSE_DOMAIN @@ -410,8 +410,11 @@ class Http(models.AbstractModel): elif id and model in self.env: obj = self.env[model].browse(int(id)) if obj and 'website_published' in obj._fields: - if self.env[obj._name].sudo().search([('id', '=', obj.id), ('website_published', '=', True)]): - self = self.sudo() + try: + if obj.sudo().website_published: + self = self.sudo() + except MissingError: + pass return super(Http, self).binary_content( xmlid=xmlid, model=model, id=id, field=field, unique=unique, filename=filename, filename_field=filename_field, download=download, mimetype=mimetype, diff --git a/addons/website/tests/test_performance.py b/addons/website/tests/test_performance.py index 275a332dc26..84f55fb1c06 100644 --- a/addons/website/tests/test_performance.py +++ b/addons/website/tests/test_performance.py @@ -34,9 +34,17 @@ class UtilPerf(HttpCase): class TestStandardPerformance(UtilPerf): def test_10_perf_sql_img_controller(self): self.authenticate('demo', 'demo') + # not published user, get the not found image placeholder + self.assertEqual(self.env['res.users'].sudo().browse(2).website_published, False) url = '/web/image/res.users/2/image_256' self.assertEqual(self._get_url_hot_query(url), 6) + def test_11_perf_sql_img_controller(self): + self.authenticate('demo', 'demo') + self.env['res.users'].sudo().browse(2).website_published = True + url = '/web/image/res.users/2/image_256' + self.assertEqual(self._get_url_hot_query(url), 5) + def test_20_perf_sql_img_controller_bis(self): url = '/web/image/website/1/favicon' self.assertEqual(self._get_url_hot_query(url), 4)