From 4a4fc38d5e9ee77e08be47b189a15dafc7c631d1 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Fri, 9 Nov 2012 12:39:51 +0100 Subject: [PATCH] [FIX] nuke ir.model.data caches before starting imports Otherwise a previous validation (or 2) will poison the cache and the import itself will fail even though the validation succeeeded (and importing with no validation would have succeeded), as the orm cache doesn't take DB rollbacks in account. bzr revid: xmo@openerp.com-20121109113951-p3qgg6m5g7poay5e --- openerp/addons/base/ir/ir_model.py | 11 +++++++++-- openerp/osv/orm.py | 3 ++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/openerp/addons/base/ir/ir_model.py b/openerp/addons/base/ir/ir_model.py index 089eefbb6a0..4bb279f3beb 100644 --- a/openerp/addons/base/ir/ir_model.py +++ b/openerp/addons/base/ir/ir_model.py @@ -878,11 +878,18 @@ class ir_model_data(osv.osv): id = False return id + def clear_caches(self): + """ Clears all orm caches on the object's methods + + :returns: itself + """ + self._get_id.clear_cache(self) + self.get_object_reference.clear_cache(self) + return self def unlink(self, cr, uid, ids, context=None): """ Regular unlink method, but make sure to clear the caches. """ - self._get_id.clear_cache(self) - self.get_object_reference.clear_cache(self) + self.clear_caches() return super(ir_model_data,self).unlink(cr, uid, ids, context=context) def _update(self,cr, uid, model, module, values, xml_id=False, store=True, noupdate=False, mode='init', res_id=False, context=None): diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index ae0eb0f8bff..e7ad9cad65c 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -1325,7 +1325,8 @@ class BaseModel(object): messages = [] fields = map(fix_import_export_id_paths, fields) - ModelData = self.pool['ir.model.data'] + ModelData = self.pool['ir.model.data'].clear_caches() + fg = self.fields_get(cr, uid, context=context) mode = 'init'