]> granicus.if.org Git - python/commitdiff
bpo-33482: fix codecs.StreamRecoder.writelines (GH-6779)
authorJelle Zijlstra <jelle.zijlstra@gmail.com>
Wed, 22 May 2019 15:18:26 +0000 (08:18 -0700)
committerMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Wed, 22 May 2019 15:18:26 +0000 (08:18 -0700)
A very simple fix. I found this while writing typeshed stubs for StreamRecoder.

https://bugs.python.org/issue33482

Lib/codecs.py
Lib/test/test_codecs.py
Misc/NEWS.d/next/Documentation/2018-05-13-10-36-37.bpo-33482.jalAaQ.rst [new file with mode: 0644]

index 6b028adb1d28e6b30aa140cc621cd60a2101c27a..884be0b2c02e434a623368421baf630d66e0bb3e 100644 (file)
@@ -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)
 
index 8c14f5981d0bcea2bcdb390b6d64174d6128c6ef..f665febfc90a21354343754aa01b493b57a1d010 100644 (file)
@@ -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 (file)
index 0000000..bda5be8
--- /dev/null
@@ -0,0 +1 @@
+Make `codecs.StreamRecoder.writelines` take a list of bytes.