Skip to content

Commit c01cf05

Browse files
committed
Migrate list chunking to util module
1 parent 42b1a2a commit c01cf05

File tree

2 files changed

+20
-4
lines changed

2 files changed

+20
-4
lines changed

cloudbot/util/pager.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
from threading import RLock
22

3+
from cloudbot.util.sequence import chunk_iter
4+
35

46
class Pager:
57
"""Multiline pager
@@ -16,16 +18,14 @@ def __init__(self, lines, chunk_size=2):
1618
# Added here due to extensive use of threads throughout plugins
1719
self.lock = RLock()
1820
self.chunk_size = chunk_size
19-
self.chunks = tuple(
20-
lines[i:i + self.chunk_size]
21-
for i in range(0, len(lines), self.chunk_size)
22-
)
21+
self.chunks = tuple(chunk_iter(lines, self.chunk_size))
2322
self.current_pos = 0
2423

2524
def format_chunk(self, chunk, pagenum):
2625
chunk = list(chunk)
2726
if len(self.chunks) > 1:
2827
chunk[-1] += " (page {}/{})".format(pagenum + 1, len(self.chunks))
28+
2929
return chunk
3030

3131
def next(self):
@@ -35,6 +35,7 @@ def next(self):
3535

3636
chunk = self[self.current_pos]
3737
self.current_pos += 1
38+
3839
return chunk
3940

4041
def get(self, index):
@@ -71,4 +72,5 @@ def paginated_list(data, delim=" \u2022 ", suffix='...', max_len=256, page_size=
7172
while lines:
7273
line = lines.pop(0)
7374
formatted_lines.append("{}{}".format(line, suffix if lines else ""))
75+
7476
return Pager(formatted_lines, chunk_size=page_size)

cloudbot/util/sequence.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
"""
2+
Sequence utilities - Various util functions for working with lists, sets, tuples, etc
3+
"""
4+
5+
6+
def chunk_iter(data, chunk_size):
7+
"""
8+
Splits a sequence in to chunks
9+
:param data: The sequence to split
10+
:param chunk_size: The maximum size of each chunk
11+
:return: An iterable of all the chunks of the sequence
12+
"""
13+
for i in range(0, len(data), chunk_size):
14+
yield data[i:i + chunk_size]

0 commit comments

Comments
 (0)