Skip to content

Commit e6df7a6

Browse files
committed
Merge pull request #9 from Digenis/fix_flatten_unicode
Fix flatten unicode
2 parents 3321e22 + d5bffc9 commit e6df7a6

File tree

2 files changed

+5
-2
lines changed

2 files changed

+5
-2
lines changed

fn/iters.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,9 +219,10 @@ def flatten(items):
219219
220220
http://docs.python.org/3.4/library/itertools.html#itertools-recipes
221221
"""
222+
str_type = basestring if version_info[0] < 3 else str
222223
for item in items:
223224
is_iterable = isinstance(item, Iterable)
224-
is_string_or_bytes = isinstance(item, (str, bytes, bytearray))
225+
is_string_or_bytes = isinstance(item, (str_type, bytes, bytearray))
225226
if is_iterable and not is_string_or_bytes:
226227
for i in flatten(item):
227228
yield i

tests.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -621,11 +621,13 @@ def test_flatten(self):
621621
self.assertEqual([1,1,2,1,2,3], list(iters.flatten(generators)))
622622
# flat list should return itself
623623
self.assertEqual([1,2,3], list(iters.flatten([1,2,3])))
624-
# Don't flatten strings, bytes, or bytearrays
624+
# Don't flatten strings/unicode, bytes, or bytearrays
625625
self.assertEqual([2,"abc",1], list(iters.flatten([2,"abc",1])))
626626
self.assertEqual([2, b'abc', 1], list(iters.flatten([2, b'abc', 1])))
627627
self.assertEqual([2, bytearray(b'abc'), 1],
628628
list(iters.flatten([2, bytearray(b'abc'), 1])))
629+
self.assertEqual([bytearray(b'abc'), b'\xd1\x8f'.decode('utf8'), b'y'],
630+
list(iters.flatten([bytearray(b'abc'), b'\xd1\x8f'.decode('utf8'), b'y'])))
629631

630632
def test_accumulate(self):
631633
self.assertEqual([1,3,6,10,15], list(iters.accumulate([1,2,3,4,5])))

0 commit comments

Comments
 (0)