From 1658bee8d45d37d7fabd0ac230b894a4a6b89303 Mon Sep 17 00:00:00 2001 From: Denis Ledoux Date: Fri, 4 Sep 2015 13:17:34 +0200 Subject: [PATCH] [FIX] models: copy_data call in new API. Context are frozendict in the new API. Therefore, they cannot be altered. Any attempt to alter a frozendict will lead to a crash. Fixes #7362 --- openerp/models.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/openerp/models.py b/openerp/models.py index b0c7762bbd7..8b047c246ff 100644 --- a/openerp/models.py +++ b/openerp/models.py @@ -4718,8 +4718,10 @@ class BaseModel(object): context = {} # avoid recursion through already copied records in case of circular relationship - seen_map = context.setdefault('__copy_data_seen', {}) - if id in seen_map.setdefault(self._name, []): + if '__copy_data_seen' not in context: + context = dict(context, __copy_data_seen=defaultdict(list)) + seen_map = context['__copy_data_seen'] + if id in seen_map[self._name]: return seen_map[self._name].append(id) @@ -4789,8 +4791,10 @@ class BaseModel(object): context = {} # avoid recursion through already copied records in case of circular relationship - seen_map = context.setdefault('__copy_translations_seen',{}) - if old_id in seen_map.setdefault(self._name,[]): + if '__copy_data_seen' not in context: + context = dict(context, __copy_data_seen=defaultdict(list)) + seen_map = context['__copy_data_seen'] + if old_id in seen_map[self._name]: return seen_map[self._name].append(old_id)