From 7c3095f984dd1f05e0596d243e0aeea642c7ebc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C3=A9n=C3=A9dikt=20Tran?= <10796600+picnixz@users.noreply.github.com> Date: Thu, 20 Jun 2024 15:13:03 +0200 Subject: [PATCH] drop reverse read support for BufferedRWPair objects --- Lib/_pyio.py | 14 -------------- Lib/test/test_io.py | 25 ++++++++----------------- Modules/_io/bufferedio.c | 28 ---------------------------- 3 files changed, 8 insertions(+), 59 deletions(-) diff --git a/Lib/_pyio.py b/Lib/_pyio.py index 414d4957a7ed4a..959327ecfd967a 100644 --- a/Lib/_pyio.py +++ b/Lib/_pyio.py @@ -1578,9 +1578,6 @@ def readinto(self, b): def write(self, b): return self.writer.write(b) - def seek(self, pos, whence=0): - return self.reader.seek(0, 2) - def peek(self, size=0): return self.reader.peek(size) @@ -1590,17 +1587,6 @@ def read1(self, size=-1): def readinto1(self, b): return self.reader.readinto1(b) - def backread(self, size=-1): - if size is None: - size = -1 - return self.reader.backread(size) - - def backreadinto(self, b): - return self.reader.backreadinto(b) - - def seekable(self): - return self.reader.seekable() - def readable(self): return self.reader.readable() diff --git a/Lib/test/test_io.py b/Lib/test/test_io.py index 5c36bda82f60fc..4d3fbee6b6b764 100644 --- a/Lib/test/test_io.py +++ b/Lib/test/test_io.py @@ -2278,25 +2278,16 @@ def test_readinto(self): self.assertEqual(getattr(pair, method)(data), 5) self.assertEqual(bytes(data), b"abcde") - def test_backread(self): - self.skipTest("TODO C (all interfaces)") - pair = self.tp(self.BytesIO(b"abcdef"), self.MockRawIO()) - pair.seek(0, 2) - self.assertEqual(pair.backread(3), b"fed") - self.assertEqual(pair.backread(1), b"c") - self.assertEqual(pair.backread(), b"ba") - - pair = self.tp(self.BytesIO(b"abc"), self.MockRawIO()) - pair.seek(0, 2) - self.assertEqual(pair.backread(None), b"cba") + def test_no_backread_support(self): + # Because of the non-seekability of BufferedRWPair, it does + # not make sense to support backread() or backreadinto() even + # for seekable buffers. + pair = self.tp(self.BytesIO(b"1234567890"), self.MockRawIO()) + self.assertRaises(io.UnsupportedOperation, pair.backread) + self.assertRaises(io.UnsupportedOperation, pair.backread, 2) - def test_backreadinto(self): - self.skipTest("TODO C (backreadinto of buffered)") pair = self.tp(self.BytesIO(b"1234567890"), self.MockRawIO()) - data = byteslike(b'\0' * 5) - pair.seek(0, 2) - self.assertEqual(pair.backreadinto(data), 5) - self.assertEqual(bytes(data), b"09876") + self.assertRaises(io.UnsupportedOperation, pair.backreadinto, bytearray()) def test_write(self): w = self.MockRawIO() diff --git a/Modules/_io/bufferedio.c b/Modules/_io/bufferedio.c index 0da0ed92eca3b2..aaa4bca5d69da9 100644 --- a/Modules/_io/bufferedio.c +++ b/Modules/_io/bufferedio.c @@ -2498,42 +2498,18 @@ bufferedrwpair_readinto1(rwpair *self, PyObject *args) return _forward_call(self->reader, &_Py_ID(readinto1), args); } -static PyObject * -bufferedrwpair_backread(rwpair *self, PyObject *args) -{ - return _forward_call(self->reader, &_Py_ID(backread), args); -} - -static PyObject * -bufferedrwpair_backreadinto(rwpair *self, PyObject *args) -{ - return _forward_call(self->reader, &_Py_ID(backreadinto), args); -} - static PyObject * bufferedrwpair_write(rwpair *self, PyObject *args) { return _forward_call(self->writer, &_Py_ID(write), args); } -static PyObject * -bufferedrwpair_seek(rwpair *self, PyObject *args) -{ - return _forward_call(self->reader, &_Py_ID(seek), args); -} - static PyObject * bufferedrwpair_flush(rwpair *self, PyObject *Py_UNUSED(ignored)) { return _forward_call(self->writer, &_Py_ID(flush), NULL); } -static PyObject * -bufferedrwpair_seekable(rwpair *self, PyObject *Py_UNUSED(ignored)) -{ - return _forward_call(self->reader, &_Py_ID(seekable), NULL); -} - static PyObject * bufferedrwpair_readable(rwpair *self, PyObject *Py_UNUSED(ignored)) { @@ -2808,14 +2784,10 @@ static PyMethodDef bufferedrwpair_methods[] = { {"read1", (PyCFunction)bufferedrwpair_read1, METH_VARARGS}, {"readinto", (PyCFunction)bufferedrwpair_readinto, METH_VARARGS}, {"readinto1", (PyCFunction)bufferedrwpair_readinto1, METH_VARARGS}, - {"backread", (PyCFunction)bufferedrwpair_backread, METH_VARARGS}, - {"backreadinto", (PyCFunction)bufferedrwpair_backreadinto, METH_VARARGS}, - {"seek", (PyCFunction)bufferedrwpair_seek, METH_VARARGS}, {"write", (PyCFunction)bufferedrwpair_write, METH_VARARGS}, {"flush", (PyCFunction)bufferedrwpair_flush, METH_NOARGS}, - {"seekable", (PyCFunction)bufferedrwpair_seekable, METH_NOARGS}, {"readable", (PyCFunction)bufferedrwpair_readable, METH_NOARGS}, {"writable", (PyCFunction)bufferedrwpair_writable, METH_NOARGS},