Reviewers: ,
Please review this at http://codereview.tryton.org/233002/
Affected files:
M trytond/tests/test_tools.py
M trytond/tools/misc.py
Index: trytond/tests/test_tools.py
===================================================================
--- a/trytond/tests/test_tools.py
+++ b/trytond/tests/test_tools.py
@@ -62,6 +62,16 @@
reduce_ids('id', [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
12, 15,
18, 19, 21]))
+ def test0055reduce_ids_float(self):
+ '''
+ Test reduce_ids with integer as float.
+ '''
+ self.assert_(('(((id >= %s) AND (id <= %s)) OR (id IN
(%s,%s,%s,%s)))',
+ [1.0, 12.0, 15.0, 18.0, 19.0, 21.0]) == \
+ reduce_ids('id', [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0,
8.0,
+ 9.0, 10.0, 11.0, 12.0, 15.0, 18.0, 19.0, 21.0]))
+ self.assertRaises(AssertionError, reduce_ids, 'id', [1.1])
+
def test0060safe_eval_builtin(self):
'''
Attempt to access a unsafe builtin.
Index: trytond/tools/misc.py
===================================================================
--- a/trytond/tools/misc.py
+++ b/trytond/tools/misc.py
@@ -329,7 +329,9 @@
'''
if not ids:
return '(%s)', [False]
- ids = ids[:]
+ assert all(x.is_integer() for x in ids if isinstance(x, float)), \
+ 'ids must be integer'
+ ids = map(int, ids)
ids.sort()
prev = ids.pop(0)
continue_list = [prev, prev]
@@ -352,7 +354,7 @@
prev = i
if continue_list[-1] - continue_list[0] < 5:
discontinue_list.extend([continue_list[0] + x for x in
- range(int(continue_list[-1] - continue_list[0] + 1))])
+ range(continue_list[-1] - continue_list[0] + 1)])
else:
sql.append('((' + field + ' >= %s) AND (' + field + ' <= %s))')
args.append(continue_list[0])
--
[email protected] mailing list