Support not sized iterable in grouped_slice
issue11575 review431301003
This commit is contained in:
1 parent
c46fa46d1e
commit
8f1a367eaf
2 files changed
+24
-4
No files matched your search
@@ -11,10 +11,10 @@ import sql
|
||||
import sql.operators
|
||||
|
||||
from trytond.tools import (
|
||||
decimal_, escape_wildcard, file_open, firstline, is_full_text,
|
||||
is_instance_method, lstrip_wildcard, reduce_domain, reduce_ids,
|
||||
remove_forbidden_chars, rstrip_wildcard, slugify, sortable_values,
|
||||
strip_wildcard, unescape_wildcard)
|
||||
decimal_, escape_wildcard, file_open, firstline, grouped_slice,
|
||||
is_full_text, is_instance_method, lstrip_wildcard, reduce_domain,
|
||||
reduce_ids, remove_forbidden_chars, rstrip_wildcard, slugify,
|
||||
sortable_values, strip_wildcard, unescape_wildcard)
|
||||
from trytond.tools.domain_inversion import (
|
||||
concat, domain_inversion, eval_domain, extract_reference_models,
|
||||
localize_domain, merge, parse, prepare_reference_domain, simplify,
|
||||
@@ -100,6 +100,23 @@ class ToolsTestCase(unittest.TestCase):
|
||||
self.assertEqual(reduce_domain(i), j,
|
||||
'%s -> %s != %s' % (i, reduce_domain(i), j))
|
||||
|
||||
def test_grouped_slice(self):
|
||||
"Test grouped slice"
|
||||
for (values, count, result) in [
|
||||
(list(range(10)), 5, [[0, 1, 2, 3, 4], [5, 6, 7, 8, 9]]),
|
||||
(list(range(5)), 5, [[0, 1, 2, 3, 4]]),
|
||||
(list(range(5)), 2, [[0, 1], [2, 3], [4]]),
|
||||
]:
|
||||
with self.subTest(values=values, count=count):
|
||||
self.assertEqual(
|
||||
list(map(list, grouped_slice(values, count))), result)
|
||||
|
||||
def test_grouped_slice_generator(self):
|
||||
"Test grouped slice"
|
||||
self.assertEqual(
|
||||
list(map(list, grouped_slice((x for x in range(10)), 5))),
|
||||
[[0, 1, 2, 3, 4], [5, 6, 7, 8, 9]])
|
||||
|
||||
def test_is_instance_method(self):
|
||||
'Test is_instance_method'
|
||||
|
||||
|
||||
@@ -13,6 +13,7 @@ import types
|
||||
import unicodedata
|
||||
import warnings
|
||||
from array import array
|
||||
from collections.abc import Sized
|
||||
from functools import wraps
|
||||
from itertools import islice
|
||||
|
||||
@@ -182,6 +183,8 @@ def grouped_slice(records, count=None):
|
||||
if count is None:
|
||||
count = Transaction().database.IN_MAX
|
||||
count = max(1, count)
|
||||
if not isinstance(records, Sized):
|
||||
records = list(records)
|
||||
for i in range(0, len(records), count):
|
||||
yield islice(records, i, i + count)
|
||||
|
||||
|
||||
Reference in new issue
Block a user