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

Reply via email to