From 1c6c289f7b48863eb052437b9f6a801924f05d39 Mon Sep 17 00:00:00 2001 From: Denis Ledoux Date: Thu, 2 Oct 2014 10:36:42 +0200 Subject: [PATCH] [FIX] api: clear environments on module installation --- openerp/addons/base/ir/ir_model.py | 3 ++- openerp/addons/base/module/module.py | 1 + openerp/addons/base/module/wizard/base_module_upgrade.py | 1 + openerp/api.py | 7 +++++++ openerp/modules/loading.py | 1 + 5 files changed, 12 insertions(+), 1 deletion(-) diff --git a/openerp/addons/base/ir/ir_model.py b/openerp/addons/base/ir/ir_model.py index f1f2bfcbec7..69099cf096e 100644 --- a/openerp/addons/base/ir/ir_model.py +++ b/openerp/addons/base/ir/ir_model.py @@ -27,7 +27,7 @@ import types import openerp from openerp import SUPERUSER_ID -from openerp import models, tools +from openerp import models, tools, api from openerp.modules.registry import RegistryManager from openerp.osv import fields, osv from openerp.osv.orm import BaseModel, Model, MAGIC_COLUMNS, except_orm @@ -181,6 +181,7 @@ class ir_model(osv.osv): # only reload pool for normal unlink. For module uninstall the # reload is done independently in openerp.modules.loading cr.commit() # must be committed before reloading registry in new cursor + api.Environment.reset() RegistryManager.new(cr.dbname) RegistryManager.signal_registry_change(cr.dbname) diff --git a/openerp/addons/base/module/module.py b/openerp/addons/base/module/module.py index 1ff3b301cc7..b327871c953 100644 --- a/openerp/addons/base/module/module.py +++ b/openerp/addons/base/module/module.py @@ -494,6 +494,7 @@ class module(osv.osv): function(cr, uid, ids, context=context) cr.commit() + api.Environment.reset() registry = openerp.modules.registry.RegistryManager.new(cr.dbname, update_module=True) config = registry['res.config'].next(cr, uid, [], context=context) or {} diff --git a/openerp/addons/base/module/wizard/base_module_upgrade.py b/openerp/addons/base/module/wizard/base_module_upgrade.py index 0f8781fcd6f..ff4f97f3c81 100644 --- a/openerp/addons/base/module/wizard/base_module_upgrade.py +++ b/openerp/addons/base/module/wizard/base_module_upgrade.py @@ -101,6 +101,7 @@ class base_module_upgrade(osv.osv_memory): ir_module.download(cr, uid, ids, context=context) cr.commit() # save before re-creating cursor below + openerp.api.Environment.reset() openerp.modules.registry.RegistryManager.new(cr.dbname, update_module=True) return {'type': 'ir.actions.act_window_close'} diff --git a/openerp/api.py b/openerp/api.py index d576f9fa001..a2385a8b109 100644 --- a/openerp/api.py +++ b/openerp/api.py @@ -693,6 +693,13 @@ class Environment(object): finally: release_local(cls._local) + @classmethod + def reset(cls): + """ Clear the set of environments. + This may be useful when recreating a registry inside a transaction. + """ + cls._local.environments = Environments() + def __new__(cls, cr, uid, context): assert context is not None args = (cr, uid, context) diff --git a/openerp/modules/loading.py b/openerp/modules/loading.py index 61e573de3ff..6011f93593f 100644 --- a/openerp/modules/loading.py +++ b/openerp/modules/loading.py @@ -432,6 +432,7 @@ def load_modules(db, force_demo=False, status=None, update_module=False): # modules to remove next time cr.commit() _logger.info('Reloading registry once more after uninstalling modules') + openerp.api.Environment.reset() return openerp.modules.registry.RegistryManager.new(cr.dbname, force_demo, status, update_module) # STEP 7: verify custom views on every model