From e1cfc1f74000e55473f7a26f0df5a13c4d5094c0 Mon Sep 17 00:00:00 2001 From: Raphael Collet <rco@odoo.com> Date: Thu, 17 Nov 2022 13:48:12 +0000 Subject: [PATCH] [FIX] core: ignore imported modules when loading registry The existing code was generating misleading errors for imported Odoo modules that could not be loaded. Although there was a specific hack for module 'studio_customization', imported modules were not handled properly. This patch adds the right condition in the SQL query in the module that introduces imported modules. closes odoo/odoo#105955 Signed-off-by: Vincent Schippefilt (vsc) <vsc@odoo.com> --- addons/base_import_module/models/ir_module.py | 4 ++++ odoo/addons/base/models/ir_module.py | 5 ++++- odoo/modules/loading.py | 14 ++++++++------ 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/addons/base_import_module/models/ir_module.py b/addons/base_import_module/models/ir_module.py index f245ead654cc..f943f0f0787f 100644 --- a/addons/base_import_module/models/ir_module.py +++ b/addons/base_import_module/models/ir_module.py @@ -25,6 +25,10 @@ class IrModule(models.Model): imported = fields.Boolean(string="Imported Module") + def _get_modules_to_load_domain(self): + # imported modules are not expected to be loaded as regular modules + return super()._get_modules_to_load_domain() + [('imported', '=', False)] + @api.depends('name') def _get_latest_version(self): imported_modules = self.filtered(lambda m: m.imported and m.latest_version) diff --git a/odoo/addons/base/models/ir_module.py b/odoo/addons/base/models/ir_module.py index 699eaa169e74..51b3206f1d10 100644 --- a/odoo/addons/base/models/ir_module.py +++ b/odoo/addons/base/models/ir_module.py @@ -320,6 +320,10 @@ class Module(models.Model): self.clear_caches() return super(Module, self).unlink() + def _get_modules_to_load_domain(self): + """ Domain to retrieve the modules that should be loaded by the registry. """ + return [('state', '=', 'installed')] + @staticmethod def _check_python_external_dependency(pydep): try: @@ -339,7 +343,6 @@ class Module(models.Model): _logger.warning("get_distribution(%s) failed: %s", pydep, e) raise Exception('Error finding python library %s' % (pydep,)) - @staticmethod def _check_external_dependencies(terp): depends = terp.get('external_dependencies') diff --git a/odoo/modules/loading.py b/odoo/modules/loading.py index 8093f14b1b0f..2cdd39ba9cf5 100644 --- a/odoo/modules/loading.py +++ b/odoo/modules/loading.py @@ -460,15 +460,17 @@ def load_modules(db, force_demo=False, status=None, update_module=False): ['to install'], force, status, report, loaded_modules, update_module, models_to_check) - # check that all installed modules have been loaded by the registry after a migration/upgrade - cr.execute("SELECT name from ir_module_module WHERE state = 'installed' and name != 'studio_customization'") - module_list = [name for (name,) in cr.fetchall() if name not in graph] - if module_list: - _logger.error("Some modules are not loaded, some dependencies or manifest may be missing: %s", sorted(module_list)) - registry.loaded = True registry.setup_models(cr) + # check that all installed modules have been loaded by the registry + env = api.Environment(cr, SUPERUSER_ID, {}) + Module = env['ir.module.module'] + modules = Module.search(Module._get_modules_to_load_domain(), order='name') + missing = [name for name in modules.mapped('name') if name not in graph] + if missing: + _logger.error("Some modules are not loaded, some dependencies or manifest may be missing: %s", missing) + # STEP 3.5: execute migration end-scripts migrations = odoo.modules.migration.MigrationManager(cr, graph) for package in graph: -- GitLab