def test_limit_reader_multiple_read(self): reader = LimitReader(BytesIO(b'abcdefghjiklmnopqrstuvwxyz'), 10) string = None for x in [2, 2, 20]: string = reader.read(x) assert b'efghji' == string
class OffsetLimitReader(LimitReader): def __init__(self, stream, offset, length): super(OffsetLimitReader, self).__init__(stream, length) self.offset = offset if offset > 0: self._skip_reader = LimitReader(stream, offset) else: self._skip_reader = None def _skip(self): while self._skip_reader: buff = self._skip_reader.read() if not buff: self._skip_reader = None def read(self, length=None): self._skip() return super(OffsetLimitReader, self).read(length) def readline(self, length=None): self._skip() return super(OffsetLimitReader, self).readline(length)
def test_limit_reader_close(self): reader = LimitReader(BytesIO(b'abcdefg'), 3) with closing(reader): assert b'abc' == reader.read(10) assert reader.tell() == 3