Fix domain_inversion for comparison of datetime with None

review359002
(transplanted from 49609073c798e7b019a5d2dc28dcebb627ad10dd)
This commit is contained in:
Cédric Krier committed 2012-05-12 16:48:17 +02:00
1 parent ec8a7f3e51
commit 0fbc23f54a
1 file changed
+22 -1
+22 -1
View File
@@ -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})