Fix domain_inversion for comparison of datetime with None
review359002
This commit is contained in:
1 parent
65dde64720
commit
8da6046027
1 file changed
+22
-1
@@ -3,6 +3,7 @@
|
||||
|
||||
import operator
|
||||
import types
|
||||
import datetime
|
||||
|
||||
|
||||
def in_(a, b):
|
||||
@@ -56,7 +57,18 @@ def eval_leaf(part, context, boolop=operator.and_):
|
||||
# We should consider that other domain inversion will set a correct
|
||||
# value to this field
|
||||
return True
|
||||
return OPERATORS[operand](context[field], value)
|
||||
context_field = context[field]
|
||||
if isinstance(context_field, datetime.date) and not value:
|
||||
if isinstance(context_field, datetime.datetime):
|
||||
value = datetime.datetime.min
|
||||
else:
|
||||
value = datetime.date.min
|
||||
if isinstance(value, datetime.date) and not context_field:
|
||||
if isinstance(value, datetime.datetime):
|
||||
context_field = datetime.datetime.min
|
||||
else:
|
||||
context_field = datetime.date.min
|
||||
return OPERATORS[operand](context_field, value)
|
||||
|
||||
|
||||
def inverse_leaf(domain):
|
||||
@@ -422,6 +434,15 @@ def test_evaldomain():
|
||||
assert eval_domain(domain, {'x': 6})
|
||||
assert not eval_domain(domain, {'x': 4})
|
||||
|
||||
domain = [['x', '>', None]]
|
||||
assert eval_domain(domain, {'x': datetime.date.today()})
|
||||
assert eval_domain(domain, {'x': datetime.datetime.now()})
|
||||
|
||||
domain = [['x', '<', datetime.date.today()]]
|
||||
assert eval_domain(domain, {'x': None})
|
||||
domain = [['x', '<', datetime.datetime.now()]]
|
||||
assert eval_domain(domain, {'x': None})
|
||||
|
||||
domain = [['x', 'in', [3, 5]]]
|
||||
assert eval_domain(domain, {'x': 3})
|
||||
assert not eval_domain(domain, {'x': 4})
|
||||
|
||||
Reference in new issue
Block a user