Merge lp:~openerp-dev/openobject-server/saas-2-nowarn-chs into lp:openobject-server

Proposed by Christophe Simonis (OpenERP)
Status: Merged
Merged at revision: 5002
Proposed branch: lp:~openerp-dev/openobject-server/saas-2-nowarn-chs
Merge into: lp:openobject-server
Diff against target: 96 lines (+27/-16)
2 files modified
openerp/addons/base/res/res_users.py (+12/-8)
openerp/osv/orm.py (+15/-8)
To merge this branch: bzr merge lp:~openerp-dev/openobject-server/saas-2-nowarn-chs
Reviewer Review Type Date Requested Status
OpenERP Core Team Pending
Review via email: mp+196748@code.launchpad.net
To post a comment you must log in.
4986. By Christophe Simonis (OpenERP)

[IMP] orm: copy() does not copy deprecated fields

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'openerp/addons/base/res/res_users.py'
2--- openerp/addons/base/res/res_users.py 2013-11-25 15:41:40 +0000
3+++ openerp/addons/base/res/res_users.py 2013-11-26 18:55:34 +0000
4@@ -763,7 +763,6 @@
5
6 def create(self, cr, uid, values, context=None):
7 self._set_reified_groups(values)
8-
9 return super(users_view, self).create(cr, uid, values, context)
10
11 def write(self, cr, uid, ids, values, context=None):
12@@ -812,7 +811,7 @@
13 if len(group_split) != 2:
14 raise osv.except_osv(_('Invalid context value'), _('Invalid context default_groups_ref value (model.name_id) : "%s"') % group_xml_id)
15 try:
16- temp, group_id = ir_model_data.get_object_reference(cr, uid, group_split[0], group_split[1])
17+ temp, group_id = ir_model_data.get_object_reference(cr, uid, group_split[0], group_split[1])
18 except ValueError:
19 group_id = False
20 groups += [group_id]
21@@ -820,14 +819,19 @@
22 return values
23
24 def read(self, cr, uid, ids, fields=None, context=None, load='_classic_read'):
25- if not fields:
26- fields = self.fields_get(cr, uid, context=context).keys()
27- group_fields, fields = partition(is_reified_group, fields)
28- if not 'groups_id' in fields:
29+ fields_get = fields if fields is not None else self.fields_get(cr, uid, context=context).keys()
30+ group_fields, _ = partition(is_reified_group, fields_get)
31+
32+ inject_groups_id = group_fields and fields and 'groups_id' not in fields
33+ if inject_groups_id:
34 fields.append('groups_id')
35 res = super(users_view, self).read(cr, uid, ids, fields, context=context, load=load)
36- for values in (res if isinstance(res, list) else [res]):
37- self._get_reified_groups(group_fields, values)
38+
39+ if group_fields:
40+ for values in (res if isinstance(res, list) else [res]):
41+ self._get_reified_groups(group_fields, values)
42+ if inject_groups_id:
43+ values.pop('groups_id', None)
44 return res
45
46 def _get_reified_groups(self, fields, values):
47
48=== modified file 'openerp/osv/orm.py'
49--- openerp/osv/orm.py 2013-11-25 15:10:17 +0000
50+++ openerp/osv/orm.py 2013-11-26 18:55:34 +0000
51@@ -4991,8 +4991,8 @@
52 context = {}
53
54 # avoid recursion through already copied records in case of circular relationship
55- seen_map = context.setdefault('__copy_data_seen',{})
56- if id in seen_map.setdefault(self._name,[]):
57+ seen_map = context.setdefault('__copy_data_seen', {})
58+ if id in seen_map.setdefault(self._name, []):
59 return
60 seen_map[self._name].append(id)
61
62@@ -5005,12 +5005,6 @@
63 else:
64 default['state'] = self._defaults['state']
65
66- data = self.read(cr, uid, [id,], context=context)
67- if data:
68- data = data[0]
69- else:
70- raise IndexError( _("Record #%d of %s not found, cannot copy!") %( id, self._name))
71-
72 # build a black list of fields that should not be copied
73 blacklist = set(MAGIC_COLUMNS + ['parent_left', 'parent_right'])
74 def blacklist_given_fields(obj):
75@@ -5023,8 +5017,21 @@
76 blacklist.update(set(self.pool[other]._all_columns) - set(self._columns))
77 else:
78 blacklist_given_fields(self.pool[other])
79+ # blacklist deprecated fields
80+ for name, field in obj._columns.items():
81+ if field.deprecated:
82+ blacklist.add(name)
83+
84 blacklist_given_fields(self)
85
86+ fields_to_read = [f for f in self.check_field_access_rights(cr, uid, 'read', None)
87+ if f not in blacklist]
88+ data = self.read(cr, uid, [id], fields_to_read, context=context)
89+ if data:
90+ data = data[0]
91+ else:
92+ raise IndexError(_("Record #%d of %s not found, cannot copy!") % (id, self._name))
93+
94 res = dict(default)
95 for f, colinfo in self._all_columns.items():
96 field = colinfo.column