Christophe (OpenERP) has proposed merging 
lp:~openerp-dev/openobject-server/6.1-irrule-inactive-subexp-chs into 
lp:openobject-server/6.1.

Requested reviews:
  OpenERP Core Team (openerp)

For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-server/6.1-irrule-inactive-subexp-chs/+merge/98657
-- 
https://code.launchpad.net/~openerp-dev/openobject-server/6.1-irrule-inactive-subexp-chs/+merge/98657
Your team OpenERP R&D Team is subscribed to branch 
lp:~openerp-dev/openobject-server/6.1-irrule-inactive-subexp-chs.
=== modified file 'openerp/addons/base/test/test_osv_expression.yml'
--- openerp/addons/base/test/test_osv_expression.yml	2011-10-11 16:34:35 +0000
+++ openerp/addons/base/test/test_osv_expression.yml	2012-03-21 15:52:20 +0000
@@ -536,4 +536,51 @@
     !python {model: res.partner }: |
         res_ids = self.search(cr, uid, [('address.country_id','=','Belgium'),('active','=',False)])
         assert len(res_ids) != 0, "Record not Found with country Belgium and active False."
-
+-
+    Testing for active_test propagated to each sub-expressions (via context)
+-
+    !record {model: res.partner, id: test_inactive_partner}:
+        name: 'ImNotActive'
+        active: False
+-
+    !record {model: res.groups, id: test_inactive_group}:
+        name: 'Inactive Group'
+        users:
+            - base.user_demo
+-
+    !record {model: ir.model.access, id: test_inactive_access}:
+        name: 'Test Inactive Access to event'
+        model_id: base.model_res_partner_event
+        group_id: test_inactive_group
+        perm_unlink: 1
+        perm_write: 1
+        perm_read: 1
+        perm_create: 1
+-
+    !record {model: ir.rule, id: test_inactive_rule}:
+        model_id: base.model_res_partner_event
+        domain_force: "[('partner_id.name', '=', 'ImNotActive')]"
+        name: test_inactive_rule
+        groups:
+            - test_inactive_group
+        perm_unlink: 1
+        perm_write: 1
+        perm_read: 1
+        perm_create: 1
+-
+    !python {model: res.partner.event}: |
+        v = dict(partner_id=ref("test_inactive_partner"), name="test event 1")
+        event_id = self.create(cr, ref('base.user_demo'), v, context=context)
+        s_ids = self.search(cr, ref('base.user_demo'), [('name', '=', 'test event 1')])
+        assert len(s_ids) == 1
+        assert s_ids[0] == event_id
+        self.browse(cr, ref('base.user_demo'), event_id).name
+-
+    !record {model: ir.rule, id: test_inactive_rule}:
+        domain_force: "[('partner_id', '=', 'ImNotActive')]"
+-
+    !python {model: res.partner.event}: |
+        s_ids = self.search(cr, ref('base.user_demo'), [('name', '=', 'test event 1')])
+        assert len(s_ids) == 1
+        self.write(cr, ref('base.user_demo'), s_ids, {'description': 'some description'})
+        self.unlink(cr, ref('base.user_demo'), s_ids)

=== modified file 'openerp/osv/expression.py'
--- openerp/osv/expression.py	2012-01-24 12:42:52 +0000
+++ openerp/osv/expression.py	2012-03-21 15:52:20 +0000
@@ -576,10 +576,6 @@
                     self.__exp = self.__exp[:i] + dom + self.__exp[i+1:]
                 else:
                     def _get_expression(field_obj, cr, uid, left, right, operator, context=None):
-                        if context is None:
-                            context = {}
-                        c = context.copy()
-                        c['active_test'] = False
                         #Special treatment to ill-formed domains
                         operator = ( operator in ['<','>','<=','>='] ) and 'in' or operator
 
@@ -590,7 +586,7 @@
                             operator = dict_op[operator]
                         elif isinstance(right, list) and operator in ['!=','=']: #for domain (FIELD,'=',['value1','value2'])
                             operator = dict_op[operator]
-                        res_ids = [x[0] for x in field_obj.name_search(cr, uid, right, [], operator, limit=None, context=c)]
+                        res_ids = [x[0] for x in field_obj.name_search(cr, uid, right, [], operator, limit=None, context=context)]
                         if operator in NEGATIVE_TERM_OPERATORS:
                             res_ids.append(False) # TODO this should not be appended if False was in 'right'
                         return (left, 'in', res_ids)

=== modified file 'openerp/osv/orm.py'
--- openerp/osv/orm.py	2012-03-09 08:19:29 +0000
+++ openerp/osv/orm.py	2012-03-21 15:52:20 +0000
@@ -4401,12 +4401,14 @@
         :return: the query expressing the given domain as provided in domain
         :rtype: osv.query.Query
         """
-        if not context:
-            context = {}
+        ctx = dict(context or {})
+        if not active_test:
+            # NOTE only overwrite active_test value if explicitly asked.
+            ctx.update(active_test=False)
         domain = domain[:]
         # if the object has a field named 'active', filter out all inactive
         # records unless they were explicitely asked for
-        if 'active' in self._all_columns and (active_test and context.get('active_test', True)):
+        if 'active' in self._all_columns and ctx.get('active_test', True):
             if domain:
                 # the item[0] trick below works for domain items and '&'/'|'/'!'
                 # operators too
@@ -4416,7 +4418,7 @@
                 domain = [('active', '=', 1)]
 
         if domain:
-            e = expression.expression(cr, user, domain, self, context)
+            e = expression.expression(cr, user, domain, self, ctx)
             tables = e.get_tables()
             where_clause, where_params = e.to_sql()
             where_clause = where_clause and [where_clause] or []

_______________________________________________
Mailing list: https://launchpad.net/~openerp-dev-gtk
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~openerp-dev-gtk
More help   : https://help.launchpad.net/ListHelp

Reply via email to