Skip to content

Commit c81dfdd

Browse files
committed
re #49 - remove buffering from iterable wrapping
1 parent d1c3fcc commit c81dfdd

File tree

2 files changed

+43
-1
lines changed

2 files changed

+43
-1
lines changed

src/json_stream/iterators.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,4 @@ def readable(self):
2222
def ensure_file(fp_or_iterable):
2323
if hasattr(fp_or_iterable, 'read'):
2424
return fp_or_iterable
25-
return io.BufferedReader(IterableStream(fp_or_iterable)) # will raise TypeError if not iterable
25+
return IterableStream(fp_or_iterable) # will raise TypeError if not iterable
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
from unittest import TestCase
2+
3+
from json_stream_rs_tokenizer import rust_tokenizer_or_raise
4+
5+
import json_stream
6+
from json_stream import to_standard_types
7+
from json_stream.tokenizer import tokenize
8+
9+
10+
class TestBuffering(TestCase):
11+
def test_buffering(self):
12+
self._test_buffering(tokenizer=rust_tokenizer_or_raise())
13+
14+
def test_buffering_python_tokenizer(self):
15+
self._test_buffering(tokenizer=tokenize)
16+
17+
def _test_buffering(self, tokenizer):
18+
happenings = []
19+
20+
def data_in_chunks(data, chunk_size=15):
21+
for i in range(0, len(data), chunk_size):
22+
part = data[i:i + chunk_size]
23+
happenings.append(('yield', part))
24+
yield part
25+
26+
json_string = b'{"tasks":[{"id":1,"title":"task1"},{"id":2,"title":"task2"},{"id":3,"title":"task3"}]}'
27+
stream = json_stream.load(data_in_chunks(json_string), tokenizer=tokenizer)
28+
29+
for task in stream["tasks"]:
30+
happenings.append(('item', to_standard_types(task)))
31+
32+
self.assertListEqual([
33+
('yield', b'{"tasks":[{"id"'),
34+
('yield', b':1,"title":"tas'),
35+
('yield', b'k1"},{"id":2,"t'),
36+
('item', {'id': 1, 'title': 'task1'}),
37+
('yield', b'itle":"task2"},'),
38+
('item', {'id': 2, 'title': 'task2'}),
39+
('yield', b'{"id":3,"title"'),
40+
('yield', b':"task3"}]}'),
41+
('item', {'id': 3, 'title': 'task3'})
42+
], happenings)

0 commit comments

Comments
 (0)