[Python-checkins] cpython: Make error handling in BZ2File.{readable,seekable,writable,fileno} consistent

nadeem.vawda python-checkins at python.org
Wed Nov 30 16:46:58 CET 2011


http://hg.python.org/cpython/rev/354dc460cba5
changeset:   73795:354dc460cba5
user:        Nadeem Vawda <nadeem.vawda at gmail.com>
date:        Wed Nov 30 17:39:30 2011 +0200
summary:
  Make error handling in BZ2File.{readable,seekable,writable,fileno} consistent with TextIOWrapper.

Also, add tests for these methods.

files:
  Lib/bz2.py           |   6 +-
  Lib/test/test_bz2.py |  57 +++++++++++++++++++++++++++++++-
  2 files changed, 59 insertions(+), 4 deletions(-)


diff --git a/Lib/bz2.py b/Lib/bz2.py
--- a/Lib/bz2.py
+++ b/Lib/bz2.py
@@ -125,6 +125,7 @@
 
     def fileno(self):
         """Return the file descriptor for the underlying file."""
+        self._check_not_closed()
         return self._fp.fileno()
 
     def seekable(self):
@@ -133,10 +134,12 @@
 
     def readable(self):
         """Return whether the file was opened for reading."""
+        self._check_not_closed()
         return self._mode in (_MODE_READ, _MODE_READ_EOF)
 
     def writable(self):
         """Return whether the file was opened for writing."""
+        self._check_not_closed()
         return self._mode == _MODE_WRITE
 
     # Mode-checking helper functions.
@@ -147,17 +150,14 @@
 
     def _check_can_read(self):
         if not self.readable():
-            self._check_not_closed()
             raise io.UnsupportedOperation("File not open for reading")
 
     def _check_can_write(self):
         if not self.writable():
-            self._check_not_closed()
             raise io.UnsupportedOperation("File not open for writing")
 
     def _check_can_seek(self):
         if not self.seekable():
-            self._check_not_closed()
             raise io.UnsupportedOperation("Seeking is only supported "
                                           "on files open for reading")
 
diff --git a/Lib/test/test_bz2.py b/Lib/test/test_bz2.py
--- a/Lib/test/test_bz2.py
+++ b/Lib/test/test_bz2.py
@@ -348,8 +348,63 @@
     def testFileno(self):
         self.createTempFile()
         with open(self.filename, 'rb') as rawf:
-            with BZ2File(fileobj=rawf) as bz2f:
+            bz2f = BZ2File(fileobj=rawf)
+            try:
                 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):
         self.createTempFile()

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list