diff --git a/Doc/library/codecs.rst b/Doc/library/codecs.rst index 86511602fa5a60..7e7377ea085c36 100644 --- a/Doc/library/codecs.rst +++ b/Doc/library/codecs.rst @@ -747,6 +747,9 @@ compatible with the Python codec registry. Writes the object's contents encoded to the stream. + .. versionchanged:: next + Returns the number of characters or bytes written to the stream. + .. method:: writelines(list) diff --git a/Lib/codecs.py b/Lib/codecs.py index fc38e922257644..c80f55b5e78a15 100644 --- a/Lib/codecs.py +++ b/Lib/codecs.py @@ -378,7 +378,7 @@ def write(self, object): """ Writes the object's contents encoded to self.stream. """ data, consumed = self.encode(object, self.errors) - self.stream.write(data) + return self.stream.write(data) def writelines(self, list): diff --git a/Lib/test/test_codecs.py b/Lib/test/test_codecs.py index 8c9a0972492294..f23789acf4330b 100644 --- a/Lib/test/test_codecs.py +++ b/Lib/test/test_codecs.py @@ -1985,6 +1985,11 @@ class StreamWriterTest(unittest.TestCase): def setUp(self): self.writer = codecs.getwriter('utf-8') + def test_write(self): + bio = io.BytesIO() + self.assertEqual(self.writer(bio).write("Hällo"), 6) + self.assertEqual(bio.getvalue(), b'H\xc3\xa4llo') + def test_copy(self): f = self.writer(Queue(b'')) with self.assertRaisesRegex(TypeError, 'StreamWriter'): @@ -2006,6 +2011,12 @@ def setUp(self): self.reader = codecs.getreader('latin1') self.writer = codecs.getwriter('utf-8') + def test_write(self): + bio = io.BytesIO() + f = codecs.StreamReaderWriter(bio, self.reader, self.writer) + self.assertEqual(f.write("Hällo"), 6) + self.assertEqual(bio.getvalue(), b'H\xc3\xa4llo') + def test_copy(self): f = codecs.StreamReaderWriter(Queue(b''), self.reader, self.writer) with self.assertRaisesRegex(TypeError, 'StreamReaderWriter'): diff --git a/Misc/NEWS.d/next/Library/2025-05-26-12-44-40.gh-issue-134706.bcTycR.rst b/Misc/NEWS.d/next/Library/2025-05-26-12-44-40.gh-issue-134706.bcTycR.rst new file mode 100644 index 00000000000000..41cffaa959658c --- /dev/null +++ b/Misc/NEWS.d/next/Library/2025-05-26-12-44-40.gh-issue-134706.bcTycR.rst @@ -0,0 +1,3 @@ +:meth:`codecs.StreamWriter.write` and :meth:`!codecs.StreamReaderWriter.write` +now correctly return the number of characters or bytes written instead of +returning ``None``.