summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJelle Zijlstra <jelle.zijlstra@gmail.com>2019-05-22 15:18:26 (GMT)
committerMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2019-05-22 15:18:26 (GMT)
commitb3be4072888a4ce054993c2801802721466ea02d (patch)
treef59540b9a13da03566d2a9121ceb87ad6b1dcf88
parent933e1509ec6efa8e6ab8c8c7ce02059ce2b6d9b9 (diff)
downloadcpython-b3be4072888a4ce054993c2801802721466ea02d.zip
cpython-b3be4072888a4ce054993c2801802721466ea02d.tar.gz
cpython-b3be4072888a4ce054993c2801802721466ea02d.tar.bz2
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
-rw-r--r--Lib/codecs.py2
-rw-r--r--Lib/test/test_codecs.py21
-rw-r--r--Misc/NEWS.d/next/Documentation/2018-05-13-10-36-37.bpo-33482.jalAaQ.rst1
3 files changed, 23 insertions, 1 deletions
diff --git a/Lib/codecs.py b/Lib/codecs.py
index 6b028ad..884be0b 100644
--- a/Lib/codecs.py
+++ b/Lib/codecs.py
@@ -838,7 +838,7 @@ class StreamRecoder:
def writelines(self, list):
- data = ''.join(list)
+ data = b''.join(list)
data, bytesdecoded = self.decode(data, self.errors)
return self.writer.write(data)
diff --git a/Lib/test/test_codecs.py b/Lib/test/test_codecs.py
index 8c14f59..f665feb 100644
--- a/Lib/test/test_codecs.py
+++ b/Lib/test/test_codecs.py
@@ -3146,6 +3146,27 @@ class Latin1Test(unittest.TestCase):
self.assertEqual(data.decode('latin1'), expected)
+class StreamRecoderTest(unittest.TestCase):
+ def test_writelines(self):
+ bio = io.BytesIO()
+ codec = codecs.lookup('ascii')
+ sr = codecs.StreamRecoder(bio, codec.encode, codec.decode,
+ encodings.ascii.StreamReader, encodings.ascii.StreamWriter)
+ sr.writelines([b'a', b'b'])
+ self.assertEqual(bio.getvalue(), b'ab')
+
+ def test_write(self):
+ bio = io.BytesIO()
+ codec = codecs.lookup('latin1')
+ # Recode from Latin-1 to utf-8.
+ sr = codecs.StreamRecoder(bio, codec.encode, codec.decode,
+ encodings.utf_8.StreamReader, encodings.utf_8.StreamWriter)
+
+ text = 'àñé'
+ sr.write(text.encode('latin1'))
+ self.assertEqual(bio.getvalue(), text.encode('utf-8'))
+
+
@unittest.skipIf(_testcapi is None, 'need _testcapi module')
class LocaleCodecTest(unittest.TestCase):
"""
diff --git a/Misc/NEWS.d/next/Documentation/2018-05-13-10-36-37.bpo-33482.jalAaQ.rst b/Misc/NEWS.d/next/Documentation/2018-05-13-10-36-37.bpo-33482.jalAaQ.rst
new file mode 100644
index 0000000..bda5be8
--- /dev/null
+++ b/Misc/NEWS.d/next/Documentation/2018-05-13-10-36-37.bpo-33482.jalAaQ.rst
@@ -0,0 +1 @@
+Make `codecs.StreamRecoder.writelines` take a list of bytes.