summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Trigaux <mat@odoo.com>2019-08-06 15:07:41 +0000
committerMartin Trigaux <mat@odoo.com>2019-08-07 13:06:17 +0000
commit85ee046b37c7c9a0dc7f052b8258f81774b127de (patch)
tree9a7da9025a665ffc52dff9849af4dc9d69e8892d
parentf5cd483216af01001f44a41f7d48f042b9f56ff9 (diff)
[IMP] *: use res.lang methods
get_installed and _lang_get_id are both ormcached and correctly check the context Retrieving a res.lang from a code is a frequent action that can be achieved with _lang_get (cf previous commit). Using _lang_get ensure the active_test in the context is correct and is not poluted with another context propagation issue. odoo/odoo#35490 discussion is an example of bad context propagation closes odoo/odoo#35504 Signed-off-by: Martin Trigaux (mat) <mat@odoo.com>
-rw-r--r--addons/auth_signup/controllers/main.py2
-rw-r--r--addons/base_gengo/wizard/base_gengo_translations.py6
-rw-r--r--addons/base_setup/models/res_config_settings.py4
-rw-r--r--addons/calendar/models/calendar.py2
-rw-r--r--addons/http_routing/models/ir_http.py11
-rw-r--r--addons/l10n_fr_pos_cert/models/pos.py2
-rw-r--r--addons/l10n_multilang/models/l10n_multilang.py2
-rw-r--r--addons/website/models/website.py4
-rw-r--r--addons/website/wizard/base_language_install.py2
-rw-r--r--odoo/addons/base/models/assetsbundle.py4
-rw-r--r--odoo/addons/base/models/ir_module.py4
-rw-r--r--odoo/addons/base/models/ir_translation.py5
-rw-r--r--odoo/addons/base/models/res_lang.py2
-rw-r--r--odoo/addons/base/tests/test_qweb.py2
-rw-r--r--odoo/addons/base/wizard/base_export_language.py4
-rw-r--r--odoo/addons/base/wizard/base_update_translations.py5
-rw-r--r--odoo/addons/test_assetsbundle/tests/test_assetsbundle.py2
-rw-r--r--odoo/addons/test_translation_import/tests/test_term_count.py8
18 files changed, 31 insertions, 40 deletions
diff --git a/addons/auth_signup/controllers/main.py b/addons/auth_signup/controllers/main.py
index da2db6041db..0618cd367f3 100644
--- a/addons/auth_signup/controllers/main.py
+++ b/addons/auth_signup/controllers/main.py
@@ -123,7 +123,7 @@ class AuthSignupHome(Home):
raise UserError(_("The form was not properly filled in."))
if values.get('password') != qcontext.get('confirm_password'):
raise UserError(_("Passwords do not match; please retype them."))
- supported_langs = [lang['code'] for lang in request.env['res.lang'].sudo().search_read([], ['code'])]
+ supported_langs = [code for code, _ in request.env['res.lang'].get_installed()]
if request.lang in supported_langs:
values['lang'] = request.lang
self._signup_with_values(qcontext.get('token'), values)
diff --git a/addons/base_gengo/wizard/base_gengo_translations.py b/addons/base_gengo/wizard/base_gengo_translations.py
index 285bf281938..24a9d060bdd 100644
--- a/addons/base_gengo/wizard/base_gengo_translations.py
+++ b/addons/base_gengo/wizard/base_gengo_translations.py
@@ -31,9 +31,9 @@ class BaseGengoTranslations(models.TransientModel):
res = super(BaseGengoTranslations, self).default_get(fields)
res['authorized_credentials'], gengo = self.gengo_authentication()
if 'lang_id' in fields:
- res['lang_id'] = self.env['res.lang'].search([
- ('code', '=', self.env.context.get('lang') or 'en_US')
- ], limit=1).id
+ res['lang_id'] = self.env['res.lang']._lang_get_id(
+ self.env.context.get('lang') or 'en_US'
+ )
return res
sync_type = fields.Selection([
diff --git a/addons/base_setup/models/res_config_settings.py b/addons/base_setup/models/res_config_settings.py
index db4c7a4e119..6d49faaf368 100644
--- a/addons/base_setup/models/res_config_settings.py
+++ b/addons/base_setup/models/res_config_settings.py
@@ -97,8 +97,6 @@ class ResConfigSettings(models.TransientModel):
@api.depends('company_id')
def _compute_language_count(self):
- language_count = self.env['res.lang'].search_count([
- ('active', '=', True),
- ])
+ language_count = len(self.env['res.lang'].get_installed())
for record in self:
record.language_count = language_count
diff --git a/addons/calendar/models/calendar.py b/addons/calendar/models/calendar.py
index c6e23f488bb..2736baf167a 100644
--- a/addons/calendar/models/calendar.py
+++ b/addons/calendar/models/calendar.py
@@ -686,7 +686,7 @@ class Meeting(models.Model):
lang = self._context.get("lang")
lang_params = {}
if lang:
- record_lang = self.env['res.lang'].search([("code", "=", lang)], limit=1)
+ record_lang = self.env['res.lang']._lang_get(lang)
lang_params = {
'date_format': record_lang.date_format,
'time_format': record_lang.time_format
diff --git a/addons/http_routing/models/ir_http.py b/addons/http_routing/models/ir_http.py
index 643d378e9ce..0da7d82e1e2 100644
--- a/addons/http_routing/models/ir_http.py
+++ b/addons/http_routing/models/ir_http.py
@@ -223,19 +223,14 @@ class IrHttp(models.AbstractModel):
)
@classmethod
- def _get_languages(cls):
- return request.env['res.lang'].search([])
-
- @classmethod
def _get_language_codes(cls):
- languages = cls._get_languages()
- return [(lang.code, lang.name) for lang in languages]
+ return request.env['res.lang'].get_installed()
@classmethod
def _get_default_lang(cls):
lang_code = request.env['ir.default'].sudo().get('res.partner', 'lang')
if lang_code:
- return request.env['res.lang'].search([('code', '=', lang_code)], limit=1)
+ return request.env['res.lang']._lang_get(lang_code)
return request.env['res.lang'].search([], limit=1)
@api.model
@@ -325,7 +320,7 @@ class IrHttp(models.AbstractModel):
if request.routing_iteration == 1:
context = dict(request.context)
path = request.httprequest.path.split('/')
- langs = [lg.code for lg in cls._get_languages()]
+ langs = [code for code, _ in request.env['res.lang'].get_installed()]
is_a_bot = cls.is_a_bot()
cook_lang = request.httprequest.cookies.get('frontend_lang')
nearest_lang = not func and cls.get_nearest_lang(path[1])
diff --git a/addons/l10n_fr_pos_cert/models/pos.py b/addons/l10n_fr_pos_cert/models/pos.py
index 227d2f81a3d..320868a2d87 100644
--- a/addons/l10n_fr_pos_cert/models/pos.py
+++ b/addons/l10n_fr_pos_cert/models/pos.py
@@ -17,7 +17,7 @@ def ctx_tz(record, field):
tz_name = pytz.timezone(ctx.get('tz') or record.env.user.tz)
timestamp = Datetime.from_string(record[field])
if ctx.get('lang'):
- res_lang = record.env['res.lang'].search([('code', '=', ctx['lang'])], limit=1)
+ res_lang = record.env['res.lang']._lang_get(ctx['lang'])
if res_lang:
timestamp = pytz.utc.localize(timestamp, is_dst=False)
return datetime.strftime(timestamp.astimezone(tz_name), res_lang.date_format + ' ' + res_lang.time_format)
diff --git a/addons/l10n_multilang/models/l10n_multilang.py b/addons/l10n_multilang/models/l10n_multilang.py
index e307f28d5a3..40433eaed92 100644
--- a/addons/l10n_multilang/models/l10n_multilang.py
+++ b/addons/l10n_multilang/models/l10n_multilang.py
@@ -118,7 +118,7 @@ class BaseLanguageInstall(models.TransientModel):
def lang_install(self):
self.ensure_one()
- already_installed = self.env['res.lang'].search_count([('code', '=', self.lang)])
+ already_installed = self.lang in [code for code, _ in self.env['res.lang'].get_installed()]
res = super(BaseLanguageInstall, self).lang_install()
if already_installed:
# update of translations instead of new installation
diff --git a/addons/website/models/website.py b/addons/website/models/website.py
index a873e2bbebc..64c68ef5d72 100644
--- a/addons/website/models/website.py
+++ b/addons/website/models/website.py
@@ -46,8 +46,8 @@ class Website(models.Model):
def _default_language(self):
lang_code = self.env['ir.default'].get('res.partner', 'lang')
- def_lang = self.env['res.lang'].search([('code', '=', lang_code)], limit=1)
- return def_lang.id if def_lang else self._active_languages()[0]
+ def_lang_id = self.env['res.lang']._lang_get_id(lang_code)
+ return def_lang_id or self._active_languages()[0]
name = fields.Char('Website Name', required=True)
domain = fields.Char('Website Domain')
diff --git a/addons/website/wizard/base_language_install.py b/addons/website/wizard/base_language_install.py
index 982645b3278..b3c6225f951 100644
--- a/addons/website/wizard/base_language_install.py
+++ b/addons/website/wizard/base_language_install.py
@@ -22,7 +22,7 @@ class BaseLanguageInstall(models.TransientModel):
def lang_install(self):
action = super(BaseLanguageInstall, self).lang_install()
- lang = self.env['res.lang'].search([('code', '=', self.lang)], limit=1)
+ lang = self.env['res.lang']._lang_get(self.lang)
if self.website_ids and lang:
self.website_ids.write({'language_ids': [(4, lang.id)]})
params = self._context.get('params', {})
diff --git a/odoo/addons/base/models/assetsbundle.py b/odoo/addons/base/models/assetsbundle.py
index 33de92a268a..93e2adb88dc 100644
--- a/odoo/addons/base/models/assetsbundle.py
+++ b/odoo/addons/base/models/assetsbundle.py
@@ -94,8 +94,8 @@ class AssetsBundle(object):
self.css_errors = []
self._checksum = None
self.files = files
- self.user_direction = self.env['res.lang'].search(
- [('code', '=', (self.env.context.get('lang') or self.env.user.lang))]
+ self.user_direction = self.env['res.lang']._lang_get(
+ self.env.context.get('lang') or self.env.user.lang
).direction
for f in files:
if f['atype'] == 'text/sass':
diff --git a/odoo/addons/base/models/ir_module.py b/odoo/addons/base/models/ir_module.py
index 5d93a8f1354..f453c2cd762 100644
--- a/odoo/addons/base/models/ir_module.py
+++ b/odoo/addons/base/models/ir_module.py
@@ -878,8 +878,8 @@ class Module(models.Model):
def _update_translations(self, filter_lang=None):
if not filter_lang:
- langs = self.env['res.lang'].search([])
- filter_lang = [lang.code for lang in langs]
+ langs = self.env['res.lang'].get_installed()
+ filter_lang = [code for code, _ in langs]
elif not isinstance(filter_lang, (list, tuple)):
filter_lang = [filter_lang]
diff --git a/odoo/addons/base/models/ir_translation.py b/odoo/addons/base/models/ir_translation.py
index f460050a7e9..c5f6f7878b9 100644
--- a/odoo/addons/base/models/ir_translation.py
+++ b/odoo/addons/base/models/ir_translation.py
@@ -191,8 +191,7 @@ class IrTranslation(models.Model):
@api.model
def _get_languages(self):
- langs = self.env['res.lang'].search([])
- return [(lang.code, lang.name) for lang in langs]
+ return self.env['res.lang'].get_installed()
def _auto_init(self):
res = super(IrTranslation, self)._auto_init()
@@ -827,7 +826,7 @@ class IrTranslation(models.Model):
[('state', '=', 'installed')], ['name'])]
if not lang:
lang = self._context["lang"]
- langs = self.env['res.lang'].sudo().search([("code", "=", lang)])
+ langs = self.env['res.lang']._lang_get(lang)
lang_params = None
if langs:
lang_params = langs.read([
diff --git a/odoo/addons/base/models/res_lang.py b/odoo/addons/base/models/res_lang.py
index 9e3b6f151e1..f64ff07342f 100644
--- a/odoo/addons/base/models/res_lang.py
+++ b/odoo/addons/base/models/res_lang.py
@@ -164,7 +164,7 @@ class Lang(models.Model):
"""
# config['load_language'] is a comma-separated list or None
lang_code = (tools.config.get('load_language') or 'en_US').split(',')[0]
- lang = self.search([('code', '=', lang_code)])
+ lang = self._lang_get(lang_code)
if not lang:
self.load_lang(lang_code)
IrDefault = self.env['ir.default']
diff --git a/odoo/addons/base/tests/test_qweb.py b/odoo/addons/base/tests/test_qweb.py
index ee9b39770a2..444c2960fe0 100644
--- a/odoo/addons/base/tests/test_qweb.py
+++ b/odoo/addons/base/tests/test_qweb.py
@@ -524,7 +524,7 @@ class TestQWebNS(TransactionCase):
self.env['res.lang'].load_lang(lang=other_lang)
- self.env['res.lang'].search([('code', '=', other_lang)], limit=1).write({
+ self.env['res.lang']._lang_get(other_lang).write({
'active': True,
'decimal_point': '*',
'thousands_sep': '/'
diff --git a/odoo/addons/base/wizard/base_export_language.py b/odoo/addons/base/wizard/base_export_language.py
index 04f945a7583..93284f54e8c 100644
--- a/odoo/addons/base/wizard/base_export_language.py
+++ b/odoo/addons/base/wizard/base_export_language.py
@@ -15,9 +15,9 @@ class BaseLanguageExport(models.TransientModel):
@api.model
def _get_languages(self):
- langs = self.env['res.lang'].search([])
+ langs = self.env['res.lang'].get_installed()
return [(NEW_LANG_KEY, _('New Language (Empty translation template)'))] + \
- [(lang.code, lang.name) for lang in langs]
+ langs
name = fields.Char('File Name', readonly=True)
lang = fields.Selection(_get_languages, string='Language', required=True, default=NEW_LANG_KEY)
diff --git a/odoo/addons/base/wizard/base_update_translations.py b/odoo/addons/base/wizard/base_update_translations.py
index 6e54a3c814e..bfe94fcb3a6 100644
--- a/odoo/addons/base/wizard/base_update_translations.py
+++ b/odoo/addons/base/wizard/base_update_translations.py
@@ -13,15 +13,14 @@ class BaseUpdateTranslations(models.TransientModel):
@api.model
def _get_languages(self):
- langs = self.env['res.lang'].search([('active', '=', True)])
- return [(lang.code, lang.name) for lang in langs]
+ return self.env['res.lang'].get_installed()
lang = fields.Selection(_get_languages, 'Language', required=True)
@api.model
def _get_lang_name(self, lang_code):
- lang = self.env['res.lang'].search([('code', '=', lang_code)], limit=1)
+ lang = self.env['res.lang']._lang_get(lang_code)
if not lang:
raise UserError(_('No language with code "%s" exists') % lang_code)
return lang.name
diff --git a/odoo/addons/test_assetsbundle/tests/test_assetsbundle.py b/odoo/addons/test_assetsbundle/tests/test_assetsbundle.py
index f96d7d268ab..92d38a6e5d8 100644
--- a/odoo/addons/test_assetsbundle/tests/test_assetsbundle.py
+++ b/odoo/addons/test_assetsbundle/tests/test_assetsbundle.py
@@ -44,7 +44,7 @@ class TestJavascriptAssetsBundle(FileTouchable):
def _any_ira_for_bundle(self, type, lang=None):
""" Returns all ir.attachments associated to a bundle, regardless of the verion.
"""
- user_direction = self.env['res.lang'].search([('code', '=', (lang or self.env.user.lang))]).direction
+ user_direction = self.env['res.lang']._lang_get(lang or self.env.user.lang).direction
bundle = self.jsbundle_xmlid if type == 'js' else self.cssbundle_xmlid
url = '/web/content/%-%/{0}{1}.{2}'.format(('rtl/' if type == 'css' and user_direction == 'rtl' else ''), bundle, type)
domain = [('url', '=like', url)]
diff --git a/odoo/addons/test_translation_import/tests/test_term_count.py b/odoo/addons/test_translation_import/tests/test_term_count.py
index 01ce7ad4d34..6f7b8b1525b 100644
--- a/odoo/addons/test_translation_import/tests/test_term_count.py
+++ b/odoo/addons/test_translation_import/tests/test_term_count.py
@@ -172,8 +172,8 @@ class TestTermCount(common.TransactionCase):
with mute_logger('odoo.addons.base.models.res_lang'):
import_tlh.import_lang()
- lang_count = self.env['res.lang'].search_count([('code', '=', 'tlh')])
- self.assertEqual(lang_count, 1, "The imported language was not creates")
+ tlh_lang = self.env['res.lang']._lang_get('tlh')
+ self.assertTrue(tlh_lang, "The imported language was not creates")
trans_count = self.env['ir.translation'].search_count([('lang', '=', 'tlh')])
self.assertEqual(trans_count, 1, "The imported translations were not created")
@@ -221,8 +221,8 @@ class TestTermCount(common.TransactionCase):
with mute_logger('odoo.addons.base.models.res_lang'):
import_tlh.import_lang()
- lang_count = self.env['res.lang'].search_count([('code', '=', 'dot')])
- self.assertEqual(lang_count, 1, "The imported language was not creates")
+ dot_lang = self.env['res.lang']._lang_get('dot')
+ self.assertTrue(dot_lang, "The imported language was not creates")
trans_count = self.env['ir.translation'].search_count([('lang', '=', 'dot')])
self.assertEqual(trans_count, 1, "The imported translations were not created")