diff options
| author | Martin Trigaux <mat@odoo.com> | 2019-08-06 15:07:41 +0000 |
|---|---|---|
| committer | Martin Trigaux <mat@odoo.com> | 2019-08-07 13:06:17 +0000 |
| commit | 85ee046b37c7c9a0dc7f052b8258f81774b127de (patch) | |
| tree | 9a7da9025a665ffc52dff9849af4dc9d69e8892d | |
| parent | f5cd483216af01001f44a41f7d48f042b9f56ff9 (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.py | 2 | ||||
| -rw-r--r-- | addons/base_gengo/wizard/base_gengo_translations.py | 6 | ||||
| -rw-r--r-- | addons/base_setup/models/res_config_settings.py | 4 | ||||
| -rw-r--r-- | addons/calendar/models/calendar.py | 2 | ||||
| -rw-r--r-- | addons/http_routing/models/ir_http.py | 11 | ||||
| -rw-r--r-- | addons/l10n_fr_pos_cert/models/pos.py | 2 | ||||
| -rw-r--r-- | addons/l10n_multilang/models/l10n_multilang.py | 2 | ||||
| -rw-r--r-- | addons/website/models/website.py | 4 | ||||
| -rw-r--r-- | addons/website/wizard/base_language_install.py | 2 | ||||
| -rw-r--r-- | odoo/addons/base/models/assetsbundle.py | 4 | ||||
| -rw-r--r-- | odoo/addons/base/models/ir_module.py | 4 | ||||
| -rw-r--r-- | odoo/addons/base/models/ir_translation.py | 5 | ||||
| -rw-r--r-- | odoo/addons/base/models/res_lang.py | 2 | ||||
| -rw-r--r-- | odoo/addons/base/tests/test_qweb.py | 2 | ||||
| -rw-r--r-- | odoo/addons/base/wizard/base_export_language.py | 4 | ||||
| -rw-r--r-- | odoo/addons/base/wizard/base_update_translations.py | 5 | ||||
| -rw-r--r-- | odoo/addons/test_assetsbundle/tests/test_assetsbundle.py | 2 | ||||
| -rw-r--r-- | odoo/addons/test_translation_import/tests/test_term_count.py | 8 |
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") |
