Skip to content

Commit

Permalink
drop reverse read support for BufferedRWPair objects
Browse files Browse the repository at this point in the history
  • Loading branch information
picnixz committed Jun 20, 2024
1 parent d98dc28 commit 7c3095f
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 59 deletions.
14 changes: 0 additions & 14 deletions Lib/_pyio.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand All @@ -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()

Expand Down
25 changes: 8 additions & 17 deletions Lib/test/test_io.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down
28 changes: 0 additions & 28 deletions Modules/_io/bufferedio.c
Original file line number Diff line number Diff line change
Expand Up @@ -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))
{
Expand Down Expand Up @@ -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},

Expand Down

0 comments on commit 7c3095f

Please sign in to comment.