[IMP] res.users: avoid reading all fields explictly when computing reified groups
authorChristophe Simonis <chs@openerp.com>
Tue, 26 Nov 2013 11:12:28 +0000 (12:12 +0100)
committerChristophe Simonis <chs@openerp.com>
Tue, 26 Nov 2013 11:12:28 +0000 (12:12 +0100)
bzr revid: chs@openerp.com-20131126111228-cjnp11nc6l383q5r

openerp/addons/base/res/res_users.py

index 53cfe69..1c26b12 100644 (file)
@@ -766,7 +766,6 @@ class users_view(osv.osv):
 
     def create(self, cr, uid, values, context=None):
         self._set_reified_groups(values)
-
         return super(users_view, self).create(cr, uid, values, context)
 
     def write(self, cr, uid, ids, values, context=None):
@@ -815,7 +814,7 @@ class users_view(osv.osv):
                 if len(group_split) != 2:
                     raise osv.except_osv(_('Invalid context value'), _('Invalid context default_groups_ref value (model.name_id) : "%s"') % group_xml_id)
                 try:
-                    temp, group_id = ir_model_data.get_object_reference(cr, uid,  group_split[0], group_split[1])
+                    temp, group_id = ir_model_data.get_object_reference(cr, uid, group_split[0], group_split[1])
                 except ValueError:
                     group_id = False
                 groups += [group_id]
@@ -823,14 +822,19 @@ class users_view(osv.osv):
         return values
 
     def read(self, cr, uid, ids, fields=None, context=None, load='_classic_read'):
-        if not fields:
-            fields = self.fields_get(cr, uid, context=context).keys()
-        group_fields, fields = partition(is_reified_group, fields)
-        if not 'groups_id' in fields:
+        fields_get = fields if fields is not None else self.fields_get(cr, uid, context=context).keys()
+        group_fields, _ = partition(is_reified_group, fields_get)
+
+        inject_groups_id = group_fields and fields and 'groups_id' not in fields
+        if inject_groups_id:
             fields.append('groups_id')
         res = super(users_view, self).read(cr, uid, ids, fields, context=context, load=load)
-        for values in (res if isinstance(res, list) else [res]):
-            self._get_reified_groups(group_fields, values)
+
+        if group_fields:
+            for values in (res if isinstance(res, list) else [res]):
+                self._get_reified_groups(group_fields, values)
+                if inject_groups_id:
+                    values.pop('groups_id', None)
         return res
 
     def _get_reified_groups(self, fields, values):