def seekable(self):
"""Return whether the file supports seeking."""
- return self.readable()
+ return self.readable() and self._fp.seekable()
def readable(self):
"""Return whether the file was opened for reading."""
raise io.UnsupportedOperation("File not open for writing")
def _check_can_seek(self):
- if not self.seekable():
+ if not self.readable():
raise io.UnsupportedOperation("Seeking is only supported "
"on files open for reading")
+ if not self._fp.seekable():
+ raise io.UnsupportedOperation("The underlying file object "
+ "does not support seeking")
# Fill the readahead buffer if it is empty. Returns False on EOF.
def _fill_buffer(self):
def seekable(self):
"""Return whether the file supports seeking."""
- return self.readable()
+ return self.readable() and self._fp.seekable()
def readable(self):
"""Return whether the file was opened for reading."""
raise io.UnsupportedOperation("File not open for writing")
def _check_can_seek(self):
- if not self.seekable():
+ if not self.readable():
raise io.UnsupportedOperation("Seeking is only supported "
"on files open for reading")
+ if not self._fp.seekable():
+ raise io.UnsupportedOperation("The underlying file object "
+ "does not support seeking")
# Fill the readahead buffer if it is empty. Returns False on EOF.
def _fill_buffer(self):
bz2f.close()
self.assertRaises(ValueError, bz2f.seekable)
+ src = BytesIO(self.DATA)
+ src.seekable = lambda: False
+ bz2f = BZ2File(fileobj=src)
+ try:
+ self.assertFalse(bz2f.seekable())
+ finally:
+ bz2f.close()
+ self.assertRaises(ValueError, bz2f.seekable)
+
def testReadable(self):
bz2f = BZ2File(fileobj=BytesIO(self.DATA))
try:
f.close()
self.assertRaises(ValueError, f.seekable)
+ src = BytesIO(COMPRESSED_XZ)
+ src.seekable = lambda: False
+ f = LZMAFile(fileobj=src)
+ try:
+ self.assertFalse(f.seekable())
+ finally:
+ f.close()
+ self.assertRaises(ValueError, f.seekable)
+
def test_readable(self):
f = LZMAFile(fileobj=BytesIO(COMPRESSED_XZ))
try: