Skip to content

Commit 81c5ec9

Browse files
JelleZijlstramiss-islington
authored andcommitted
[3.7] bpo-33482: fix codecs.StreamRecoder.writelines (GH-6779) (GH-13502)
A very simple fix. I found this while writing typeshed stubs for StreamRecoder. https://bugs.python.org/issue33482. (cherry picked from commit b3be407) Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com> https://bugs.python.org/issue33482
1 parent a58db96 commit 81c5ec9

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
@@ -3298,5 +3298,26 @@ def test_decode(self):
32983298
self.assertEqual(data.decode('latin1'), expected)
32993299

33003300

3301+
class StreamRecoderTest(unittest.TestCase):
3302+
def test_writelines(self):
3303+
bio = io.BytesIO()
3304+
codec = codecs.lookup('ascii')
3305+
sr = codecs.StreamRecoder(bio, codec.encode, codec.decode,
3306+
encodings.ascii.StreamReader, encodings.ascii.StreamWriter)
3307+
sr.writelines([b'a', b'b'])
3308+
self.assertEqual(bio.getvalue(), b'ab')
3309+
3310+
def test_write(self):
3311+
bio = io.BytesIO()
3312+
codec = codecs.lookup('latin1')
3313+
# Recode from Latin-1 to utf-8.
3314+
sr = codecs.StreamRecoder(bio, codec.encode, codec.decode,
3315+
encodings.utf_8.StreamReader, encodings.utf_8.StreamWriter)
3316+
3317+
text = 'àñé'
3318+
sr.write(text.encode('latin1'))
3319+
self.assertEqual(bio.getvalue(), text.encode('utf-8'))
3320+
3321+
33013322
if __name__ == "__main__":
33023323
unittest.main()
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)