summaryrefslogtreecommitdiff
path: root/addons/base_import_module
diff options
context:
space:
mode:
authorAdrian Torres <adt@odoo.com>2020-10-07 10:50:21 +0000
committerAdrian Torres <adt@odoo.com>2020-10-07 12:58:12 +0000
commit7013090c072036ff8c7278e6c5e05334616db06b (patch)
tree462e24d9e12306002517e89a1cc67595d3d75a3f /addons/base_import_module
parentb7cc3b068f685d1339f9fe7e47d0c564de1708e7 (diff)
[FIX] base_import_module: avoid accessing deleted columns
Commit 59eee6ba5fed0ba74221f44a296ec6efedbc2527 introduced a cleanup mechanism for external data modules being uninstalled from a database, this meant deleting the ir.module.module entry created when first installing the aforementioned external module. However, the above patch has one small oversight: the access of the `imported` field introduced by the `base_import_module` module is done after the `super().module_uninstall()` call which, in the case of the uninstall of the `base_import_module` module, will delete the `imported` column and the following call to filtered will fail because the column has already been deleted and the registry hasn't been reloaded yet. The solution to this, as explained in the code comment, is to simply compute the `modules_to_delete` before the call to `module_uninstall()`. closes odoo/odoo#59412 X-original-commit: c0226087b82ffda3971bb953d8d00b8c5e67642c Signed-off-by: Raphael Collet (rco) <rco@openerp.com> Signed-off-by: Adrian Torres (adt) <adt@odoo.com>
Diffstat (limited to 'addons/base_import_module')
-rw-r--r--addons/base_import_module/models/ir_module.py5
1 files changed, 4 insertions, 1 deletions
diff --git a/addons/base_import_module/models/ir_module.py b/addons/base_import_module/models/ir_module.py
index 9e2116507a6..f245ead654c 100644
--- a/addons/base_import_module/models/ir_module.py
+++ b/addons/base_import_module/models/ir_module.py
@@ -151,8 +151,11 @@ class IrModule(models.Model):
# one. The rationale behind this is that an imported module *cannot* be
# reinstalled anyway, as it requires the data files. Any attempt to
# install it again will simply fail without trace.
- res = super().module_uninstall()
+ # /!\ modules_to_delete must be calculated before calling super().module_uninstall(),
+ # because when uninstalling `base_import_module` the `imported` column will no longer be
+ # in the database but we'll still have an old registry that runs this code.
modules_to_delete = self.filtered('imported')
+ res = super().module_uninstall()
if modules_to_delete:
_logger.info("deleting imported modules upon uninstallation: %s",
", ".join(modules_to_delete.mapped('name')))