From 6347f9f4ea1412ae86b105c7ee9451f3924db7fe Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Tue, 26 Nov 2013 19:52:10 +0100 Subject: [PATCH] [IMP] orm: copy() does not copy deprecated fields bzr revid: chs@openerp.com-20131126185210-8kd5stdexa4ozn2m --- openerp/osv/orm.py | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index d0504300431..517f5126f54 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -4991,8 +4991,8 @@ 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,[]): + seen_map = context.setdefault('__copy_data_seen', {}) + if id in seen_map.setdefault(self._name, []): return seen_map[self._name].append(id) @@ -5005,12 +5005,6 @@ class BaseModel(object): else: default['state'] = self._defaults['state'] - data = self.read(cr, uid, [id,], context=context) - if data: - data = data[0] - else: - raise IndexError( _("Record #%d of %s not found, cannot copy!") %( id, self._name)) - # build a black list of fields that should not be copied blacklist = set(MAGIC_COLUMNS + ['parent_left', 'parent_right']) def blacklist_given_fields(obj): @@ -5023,8 +5017,21 @@ class BaseModel(object): blacklist.update(set(self.pool[other]._all_columns) - set(self._columns)) else: blacklist_given_fields(self.pool[other]) + # blacklist deprecated fields + for name, field in obj._columns.items(): + if field.deprecated: + blacklist.add(name) + blacklist_given_fields(self) + fields_to_read = [f for f in self.check_field_access_rights(cr, uid, 'read', None) + if f not in blacklist] + data = self.read(cr, uid, [id], fields_to_read, context=context) + if data: + data = data[0] + else: + raise IndexError(_("Record #%d of %s not found, cannot copy!") % (id, self._name)) + res = dict(default) for f, colinfo in self._all_columns.items(): field = colinfo.column