Fix in operator to work with xxx2many
review186004
This commit is contained in:
1 parent
87db1f7ec1
commit
66525d08f1
1 file changed
+15
-2
@@ -4,6 +4,12 @@
|
||||
import operator
|
||||
import types
|
||||
|
||||
def in_(a, b):
|
||||
if isinstance(a, (list, tuple)):
|
||||
return any(operator.contains(b, x) for x in a)
|
||||
else:
|
||||
return operator.contains(b, a)
|
||||
|
||||
OPERATORS = {
|
||||
'=': operator.eq,
|
||||
'>': operator.gt,
|
||||
@@ -11,8 +17,8 @@ OPERATORS = {
|
||||
'<=': operator.le,
|
||||
'>=': operator.ge,
|
||||
'!=': operator.ne,
|
||||
'in': lambda a, b: operator.contains(b, a),
|
||||
'not in': lambda a, b: not operator.contains(b, a),
|
||||
'in': in_,
|
||||
'not in': lambda a, b: not in_(b, a),
|
||||
# Those operators are not supported (yet ?)
|
||||
'like': lambda a, b: True,
|
||||
'ilike': lambda a, b: True,
|
||||
@@ -390,6 +396,13 @@ def test_evaldomain():
|
||||
assert eval_domain(domain, {'x': 6})
|
||||
assert not eval_domain(domain, {'x': 4})
|
||||
|
||||
domain = [['x', 'in', [3, 5]]]
|
||||
assert eval_domain(domain, {'x': 3})
|
||||
assert not eval_domain(domain, {'x': 4})
|
||||
assert eval_domain(domain, {'x': [3]})
|
||||
assert eval_domain(domain, {'x': [3, 4]})
|
||||
assert not eval_domain(domain, {'x': [1, 2]})
|
||||
|
||||
domain = ['OR', ['x', '>', 10], ['x', '<', 0]]
|
||||
assert eval_domain(domain, {'x': 11})
|
||||
assert eval_domain(domain, {'x': -4})
|
||||
|
||||
Reference in new issue
Block a user