Author: Ronan Lamy <ronan.l...@gmail.com> Branch: py3.5 Changeset: r93122:70b9b696e219 Date: 2017-11-22 18:32 +0000 http://bitbucket.org/pypy/pypy/changeset/70b9b696e219/
Log: io.BufferedRandom also uses the new readinto() implementation diff --git a/pypy/module/_io/interp_bufferedio.py b/pypy/module/_io/interp_bufferedio.py --- a/pypy/module/_io/interp_bufferedio.py +++ b/pypy/module/_io/interp_bufferedio.py @@ -869,19 +869,14 @@ finally: self._reader_reset_buf() -class W_BufferedReader(BufferedMixin, W_BufferedIOBase): - @unwrap_spec(buffer_size=int) - def descr_init(self, space, w_raw, buffer_size=DEFAULT_BUFFER_SIZE): - self.state = STATE_ZERO - check_readable_w(space, w_raw) +class BufferedReaderMixin(BufferedMixin): + _mixin_ = True - self.w_raw = w_raw - self.buffer_size = buffer_size - self.readable = True + def readinto_w(self, space, w_buffer): + return self._readinto(space, w_buffer, read_once=False) - self._init(space) - self._reader_reset_buf() - self.state = STATE_OK + def readinto1_w(self, space, w_buffer): + return self._readinto(space, w_buffer, read_once=True) def _readinto(self, space, w_buffer, read_once): rwbuffer = space.writebuf_w(w_buffer) @@ -904,7 +899,8 @@ self.pos = 0 if written + len(self.buffer) < length: try: - got = self._raw_read(space, rwbuffer, written, length - written) + got = self._raw_read( + space, rwbuffer, written, length - written) written += got except BlockingIOError: got = 0 @@ -929,6 +925,19 @@ return space.newint(written) +class W_BufferedReader(BufferedReaderMixin, W_BufferedIOBase): + @unwrap_spec(buffer_size=int) + def descr_init(self, space, w_raw, buffer_size=DEFAULT_BUFFER_SIZE): + self.state = STATE_ZERO + check_readable_w(space, w_raw) + + self.w_raw = w_raw + self.buffer_size = buffer_size + self.readable = True + + self._init(space) + self._reader_reset_buf() + self.state = STATE_OK W_BufferedReader.typedef = TypeDef( '_io.BufferedReader', W_BufferedIOBase.typedef, @@ -939,6 +948,8 @@ read = interp2app(W_BufferedReader.read_w), peek = interp2app(W_BufferedReader.peek_w), read1 = interp2app(W_BufferedReader.read1_w), + readinto = interp2app(W_BufferedReader.readinto_w), + readinto1 = interp2app(W_BufferedReader.readinto1_w), raw = interp_attrproperty_w("w_raw", cls=W_BufferedReader), readline = interp2app(W_BufferedReader.readline_w), @@ -1100,7 +1111,7 @@ **methods ) -class W_BufferedRandom(BufferedMixin, W_BufferedIOBase): +class W_BufferedRandom(BufferedReaderMixin, W_BufferedIOBase): @unwrap_spec(buffer_size=int) def descr_init(self, space, w_raw, buffer_size=DEFAULT_BUFFER_SIZE): self.state = STATE_ZERO @@ -1128,6 +1139,8 @@ peek = interp2app(W_BufferedRandom.peek_w), read1 = interp2app(W_BufferedRandom.read1_w), readline = interp2app(W_BufferedRandom.readline_w), + readinto = interp2app(W_BufferedRandom.readinto_w), + readinto1 = interp2app(W_BufferedRandom.readinto1_w), write = interp2app(W_BufferedRandom.write_w), flush = interp2app(W_BufferedRandom.flush_w), diff --git a/pypy/module/_io/test/test_bufferedio.py b/pypy/module/_io/test/test_bufferedio.py --- a/pypy/module/_io/test/test_bufferedio.py +++ b/pypy/module/_io/test/test_bufferedio.py @@ -199,6 +199,19 @@ def readinto(self, buf): buf[:3] = b"abc" return 3 + + def writable(self): + return True + + def write(self, b): + return len(b) + + def seekable(self): + return True + + def seek(self, pos, whence): + return 0 + bufio = _io.BufferedReader(MockIO(), buffer_size=5) buf = bytearray(10) bufio.read(2) @@ -223,6 +236,15 @@ assert n == 1 assert buf[:n] == b'c' + bufio = _io.BufferedRandom(MockIO(), buffer_size=10) + buf = bytearray(20) + bufio.peek(3) + assert bufio.readinto1(buf) == 6 + assert buf[:6] == b'abcabc' + + bufio = _io.BufferedWriter(MockIO(), buffer_size=10) + raises(_io.UnsupportedOperation, bufio.readinto1, bytearray(10)) + def test_seek(self): import _io raw = _io.FileIO(self.tmpfile) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit