Kaydet (Commit) 44ae4a2a authored tarafından Nadeem Vawda's avatar Nadeem Vawda

Make error handling in BZ2File.{readable,seekable,writable,fileno} consistent with TextIOWrapper.

Also, add tests for these methods.
üst 3ff069eb
...@@ -125,6 +125,7 @@ class BZ2File(io.BufferedIOBase): ...@@ -125,6 +125,7 @@ class BZ2File(io.BufferedIOBase):
def fileno(self): def fileno(self):
"""Return the file descriptor for the underlying file.""" """Return the file descriptor for the underlying file."""
self._check_not_closed()
return self._fp.fileno() return self._fp.fileno()
def seekable(self): def seekable(self):
...@@ -133,10 +134,12 @@ class BZ2File(io.BufferedIOBase): ...@@ -133,10 +134,12 @@ class BZ2File(io.BufferedIOBase):
def readable(self): def readable(self):
"""Return whether the file was opened for reading.""" """Return whether the file was opened for reading."""
self._check_not_closed()
return self._mode in (_MODE_READ, _MODE_READ_EOF) return self._mode in (_MODE_READ, _MODE_READ_EOF)
def writable(self): def writable(self):
"""Return whether the file was opened for writing.""" """Return whether the file was opened for writing."""
self._check_not_closed()
return self._mode == _MODE_WRITE return self._mode == _MODE_WRITE
# Mode-checking helper functions. # Mode-checking helper functions.
...@@ -147,17 +150,14 @@ class BZ2File(io.BufferedIOBase): ...@@ -147,17 +150,14 @@ class BZ2File(io.BufferedIOBase):
def _check_can_read(self): def _check_can_read(self):
if not self.readable(): if not self.readable():
self._check_not_closed()
raise io.UnsupportedOperation("File not open for reading") raise io.UnsupportedOperation("File not open for reading")
def _check_can_write(self): def _check_can_write(self):
if not self.writable(): if not self.writable():
self._check_not_closed()
raise io.UnsupportedOperation("File not open for writing") raise io.UnsupportedOperation("File not open for writing")
def _check_can_seek(self): def _check_can_seek(self):
if not self.seekable(): if not self.seekable():
self._check_not_closed()
raise io.UnsupportedOperation("Seeking is only supported " raise io.UnsupportedOperation("Seeking is only supported "
"on files open for reading") "on files open for reading")
......
...@@ -348,8 +348,63 @@ class BZ2FileTest(BaseTest): ...@@ -348,8 +348,63 @@ class BZ2FileTest(BaseTest):
def testFileno(self): def testFileno(self):
self.createTempFile() self.createTempFile()
with open(self.filename, 'rb') as rawf: with open(self.filename, 'rb') as rawf:
with BZ2File(fileobj=rawf) as bz2f: bz2f = BZ2File(fileobj=rawf)
try:
self.assertEqual(bz2f.fileno(), rawf.fileno()) self.assertEqual(bz2f.fileno(), rawf.fileno())
finally:
bz2f.close()
self.assertRaises(ValueError, bz2f.fileno)
def testSeekable(self):
bz2f = BZ2File(fileobj=BytesIO(self.DATA))
try:
self.assertTrue(bz2f.seekable())
bz2f.read()
self.assertTrue(bz2f.seekable())
finally:
bz2f.close()
self.assertRaises(ValueError, bz2f.seekable)
bz2f = BZ2File(fileobj=BytesIO(), mode="w")
try:
self.assertFalse(bz2f.seekable())
finally:
bz2f.close()
self.assertRaises(ValueError, bz2f.seekable)
def testReadable(self):
bz2f = BZ2File(fileobj=BytesIO(self.DATA))
try:
self.assertTrue(bz2f.readable())
bz2f.read()
self.assertTrue(bz2f.readable())
finally:
bz2f.close()
self.assertRaises(ValueError, bz2f.readable)
bz2f = BZ2File(fileobj=BytesIO(), mode="w")
try:
self.assertFalse(bz2f.readable())
finally:
bz2f.close()
self.assertRaises(ValueError, bz2f.readable)
def testWritable(self):
bz2f = BZ2File(fileobj=BytesIO(self.DATA))
try:
self.assertFalse(bz2f.writable())
bz2f.read()
self.assertFalse(bz2f.writable())
finally:
bz2f.close()
self.assertRaises(ValueError, bz2f.writable)
bz2f = BZ2File(fileobj=BytesIO(), mode="w")
try:
self.assertTrue(bz2f.writable())
finally:
bz2f.close()
self.assertRaises(ValueError, bz2f.writable)
def testOpenDel(self): def testOpenDel(self):
self.createTempFile() self.createTempFile()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment