[FIX] base_import_module: avoid accessing deleted columns
Commit 59eee6ba5f 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#59418
X-original-commit: c0226087b82ffda3971bb953d8d00b8c5e67642c
Signed-off-by: Raphael Collet (rco) <rco@openerp.com>
Signed-off-by: Adrian Torres (adt) <adt@odoo.com>
This commit is contained in:
@@ -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')))
|
||||
|
||||
Reference in New Issue
Block a user