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