summaryrefslogtreecommitdiff
path: root/addons
diff options
context:
space:
mode:
authorJeremy Kersten <jke@odoo.com>2020-03-13 15:16:40 +0000
committerRomain Derie <rde@odoo.com>2020-03-19 15:37:47 +0000
commit4c403934903b68afb08e87ac571b6777042e5a7f (patch)
treed18c5b90847137099983849abcca732832426df8 /addons
parentc2142a34f73cb8329e8d214596484bd9a581b3e6 (diff)
[FIX] website: perf - translation - avoid query to find what we know
Before this commit, each module override _get_translation_frontend_modules_domain from ir.http to add its own translation in website if needed and that module is not starting by website_. Updating the domain from the super() call. Since we know in most of the case the name, it is useless to do a: select name from module where name = 'name1' or name = 'name2'... Now we support a new override of _get_translation_frontend_modules_name that will allow to add the known module name directly in the list instead to make a search. In case nobody override _get_translation_frontend_modules_domain, we don't need to make an extra rpc to find the module. Related to #47257 task-2211013 X-original-commit: 0dc54814161ab55c34dd2242f65dea23d19fdfca
Diffstat (limited to 'addons')
-rw-r--r--addons/http_routing/models/ir_http.py21
-rw-r--r--addons/payment/models/ir_http.py7
-rw-r--r--addons/portal/models/ir_http.py7
-rw-r--r--addons/web_editor/models/ir_http.py7
-rw-r--r--addons/website/models/ir_http.py9
-rw-r--r--addons/website_livechat/models/ir_http.py9
6 files changed, 34 insertions, 26 deletions
diff --git a/addons/http_routing/models/ir_http.py b/addons/http_routing/models/ir_http.py
index 4f441b2079a..ae3ca509b73 100644
--- a/addons/http_routing/models/ir_http.py
+++ b/addons/http_routing/models/ir_http.py
@@ -313,17 +313,28 @@ class IrHttp(models.AbstractModel):
@api.model
def get_translation_frontend_modules(self):
Modules = request.env['ir.module.module'].sudo()
- domain = self._get_translation_frontend_modules_domain()
- return Modules.search(
- expression.AND([domain, [('state', '=', 'installed')]])
- ).mapped('name')
+ extra_modules_domain = self._get_translation_frontend_modules_domain()
+ extra_modules_name = self._get_translation_frontend_modules_name()
+ if extra_modules_domain:
+ new = Modules.search(
+ expression.AND([extra_modules_domain, [('state', '=', 'installed')]])
+ ).mapped('name')
+ extra_modules_name += new
+ return extra_modules_name
@classmethod
def _get_translation_frontend_modules_domain(cls):
""" Return a domain to list the domain adding web-translations and
dynamic resources that may be used frontend views
"""
- return [('name', '=', 'web')]
+ return []
+
+ @classmethod
+ def _get_translation_frontend_modules_name(cls):
+ """ Return a list of module name where web-translations and
+ dynamic resources may be used in frontend views
+ """
+ return ['web']
bots = "bot|crawl|slurp|spider|curl|wget|facebookexternalhit".split("|")
diff --git a/addons/payment/models/ir_http.py b/addons/payment/models/ir_http.py
index 0d9c9c8de32..ad6bddf87cc 100644
--- a/addons/payment/models/ir_http.py
+++ b/addons/payment/models/ir_http.py
@@ -2,13 +2,12 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import models
-from odoo.osv import expression
class IrHttp(models.AbstractModel):
_inherit = 'ir.http'
@classmethod
- def _get_translation_frontend_modules_domain(cls):
- domain = super(IrHttp, cls)._get_translation_frontend_modules_domain()
- return expression.OR([domain, [('name', '=', 'payment')]])
+ def _get_translation_frontend_modules_name(cls):
+ mods = super(IrHttp, cls)._get_translation_frontend_modules_name()
+ return mods + ['payment']
diff --git a/addons/portal/models/ir_http.py b/addons/portal/models/ir_http.py
index 2c654c73986..3fad96ff9f1 100644
--- a/addons/portal/models/ir_http.py
+++ b/addons/portal/models/ir_http.py
@@ -2,13 +2,12 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import models
-from odoo.osv import expression
class IrHttp(models.AbstractModel):
_inherit = 'ir.http'
@classmethod
- def _get_translation_frontend_modules_domain(cls):
- domain = super(IrHttp, cls)._get_translation_frontend_modules_domain()
- return expression.OR([domain, [('name', '=', 'portal')]])
+ def _get_translation_frontend_modules_name(cls):
+ mods = super(IrHttp, cls)._get_translation_frontend_modules_name()
+ return mods + ['portal']
diff --git a/addons/web_editor/models/ir_http.py b/addons/web_editor/models/ir_http.py
index aaf0f67cefb..d9690f5ecfd 100644
--- a/addons/web_editor/models/ir_http.py
+++ b/addons/web_editor/models/ir_http.py
@@ -3,7 +3,6 @@
from odoo import models
from odoo.http import request
-from odoo.osv import expression
class IrHttp(models.AbstractModel):
@@ -22,6 +21,6 @@ class IrHttp(models.AbstractModel):
return super(IrHttp, cls)._dispatch()
@classmethod
- def _get_translation_frontend_modules_domain(cls):
- domain = super(IrHttp, cls)._get_translation_frontend_modules_domain()
- return expression.OR([domain, [('name', '=', 'web_editor')]])
+ def _get_translation_frontend_modules_name(cls):
+ mods = super(IrHttp, cls)._get_translation_frontend_modules_name()
+ return mods + ['web_editor']
diff --git a/addons/website/models/ir_http.py b/addons/website/models/ir_http.py
index ca734f1afe7..c3f298eddf3 100644
--- a/addons/website/models/ir_http.py
+++ b/addons/website/models/ir_http.py
@@ -17,7 +17,7 @@ from odoo import api, models
from odoo import registry, SUPERUSER_ID
from odoo.http import request
from odoo.tools.safe_eval import safe_eval
-from odoo.osv.expression import FALSE_DOMAIN, OR
+from odoo.osv.expression import FALSE_DOMAIN
from odoo.addons.http_routing.models.ir_http import ModelConverter, _guess_mimetype
from odoo.addons.portal.controllers.portal import _build_url_w_params
@@ -226,9 +226,10 @@ class Http(models.AbstractModel):
return super(Http, cls)._get_default_lang()
@classmethod
- def _get_translation_frontend_modules_domain(cls):
- domain = super(Http, cls)._get_translation_frontend_modules_domain()
- return OR([domain, [('name', 'ilike', 'website')]])
+ def _get_translation_frontend_modules_name(cls):
+ mods = super(Http, cls)._get_translation_frontend_modules_name()
+ installed = request.registry._init_modules | set(odoo.conf.server_wide_modules)
+ return mods + [mod for mod in installed if mod.startswith('website')]
@classmethod
def _serve_page(cls):
diff --git a/addons/website_livechat/models/ir_http.py b/addons/website_livechat/models/ir_http.py
index 3ab3566502a..20f54548c96 100644
--- a/addons/website_livechat/models/ir_http.py
+++ b/addons/website_livechat/models/ir_http.py
@@ -1,14 +1,13 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-from odoo import api, fields, models
-from odoo.osv import expression
+from odoo import models
class IrHttp(models.AbstractModel):
_inherit = 'ir.http'
@classmethod
- def _get_translation_frontend_modules_domain(cls):
- domain = super(IrHttp, cls)._get_translation_frontend_modules_domain()
- return expression.OR([domain, [('name', '=', 'im_livechat')]])
+ def _get_translation_frontend_modules_name(cls):
+ mods = super(IrHttp, cls)._get_translation_frontend_modules_name()
+ return mods + ['im_livechat']