Skip to content

Commit b3be407

Browse files
JelleZijlstramiss-islington
authored andcommitted
bpo-33482: fix codecs.StreamRecoder.writelines (GH-6779)
A very simple fix. I found this while writing typeshed stubs for StreamRecoder. https://bugs.python.org/issue33482
1 parent 933e150 commit b3be407

File tree

3 files changed

+23
-1
lines changed

3 files changed

+23
-1
lines changed

Lib/codecs.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -838,7 +838,7 @@ def write(self, data):
838838

839839
def writelines(self, list):
840840

841-
data = ''.join(list)
841+
data = b''.join(list)
842842
data, bytesdecoded = self.decode(data, self.errors)
843843
return self.writer.write(data)
844844

Lib/test/test_codecs.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3146,6 +3146,27 @@ def test_decode(self):
31463146
self.assertEqual(data.decode('latin1'), expected)
31473147

31483148

3149+
class StreamRecoderTest(unittest.TestCase):
3150+
def test_writelines(self):
3151+
bio = io.BytesIO()
3152+
codec = codecs.lookup('ascii')
3153+
sr = codecs.StreamRecoder(bio, codec.encode, codec.decode,
3154+
encodings.ascii.StreamReader, encodings.ascii.StreamWriter)
3155+
sr.writelines([b'a', b'b'])
3156+
self.assertEqual(bio.getvalue(), b'ab')
3157+
3158+
def test_write(self):
3159+
bio = io.BytesIO()
3160+
codec = codecs.lookup('latin1')
3161+
# Recode from Latin-1 to utf-8.
3162+
sr = codecs.StreamRecoder(bio, codec.encode, codec.decode,
3163+
encodings.utf_8.StreamReader, encodings.utf_8.StreamWriter)
3164+
3165+
text = 'àñé'
3166+
sr.write(text.encode('latin1'))
3167+
self.assertEqual(bio.getvalue(), text.encode('utf-8'))
3168+
3169+
31493170
@unittest.skipIf(_testcapi is None, 'need _testcapi module')
31503171
class LocaleCodecTest(unittest.TestCase):
31513172
"""
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Make `codecs.StreamRecoder.writelines` take a list of bytes.

0 commit comments

Comments
 (0)