]> granicus.if.org Git - python/commitdiff
make FileIO.mode always include 'b'
authorBenjamin Peterson <benjamin@python.org>
Sat, 22 Nov 2008 00:41:45 +0000 (00:41 +0000)
committerBenjamin Peterson <benjamin@python.org>
Sat, 22 Nov 2008 00:41:45 +0000 (00:41 +0000)
#4386 Reviewed by Amaury

Doc/library/stdtypes.rst
Lib/socket.py
Lib/test/test_fileio.py
Lib/test/test_gzip.py
Lib/test/test_io.py
Lib/test/test_socket.py
Misc/NEWS
Modules/_fileio.c

index f0d51e26f29cfa5cd2134d09a893c5d5cf08da83..5668623ed34565dbe35d757612ba520443f3a8ff 100644 (file)
@@ -1875,6 +1875,8 @@ pairs within braces, for example: ``{'jack': 4098, 'sjoerd': 4127}`` or ``{4098:
       view objects.
 
 
+.. _dict-views:
+
 Dictionary view objects
 -----------------------
 
index 5578b13b1a3e7d9cfd4ef80c9017980264a0a81e..045987c086013f2e7d4efb369b9a1a61299c976d 100644 (file)
@@ -198,10 +198,12 @@ class SocketIO(io.RawIOBase):
     # XXX More docs
 
     def __init__(self, sock, mode):
-        if mode not in ("r", "w", "rw"):
+        if mode not in ("r", "w", "rw", "rb", "wb", "rwb"):
             raise ValueError("invalid mode: %r" % mode)
         io.RawIOBase.__init__(self)
         self._sock = sock
+        if "b" not in mode:
+            mode += "b"
         self._mode = mode
         self._reading = "r" in mode
         self._writing = "w" in mode
index a11d3ba11739737cc64a424d42ed66281192b606..80de93ddb9f0863edd8ad185c66cc8beaa074fd8 100644 (file)
@@ -49,7 +49,7 @@ class AutoFileTests(unittest.TestCase):
         # verify expected attributes exist
         f = self.f
 
-        self.assertEquals(f.mode, "w")
+        self.assertEquals(f.mode, "wb")
         self.assertEquals(f.closed, False)
 
         # verify the attributes are readonly
@@ -159,7 +159,7 @@ class OtherFileTests(unittest.TestCase):
 
     def testModeStrings(self):
         # check invalid mode strings
-        for mode in ("", "aU", "wU+", "rb", "rt"):
+        for mode in ("", "aU", "wU+", "rw", "rt"):
             try:
                 f = _fileio._FileIO(TESTFN, mode)
             except ValueError:
index 3493b8dfba6c406a7b0471ee0014527f818ea207..d28c024d07ffcffe85f57519b2c80b69e5da9075 100644 (file)
@@ -150,7 +150,7 @@ class TestGzip(unittest.TestCase):
     def test_mode(self):
         self.test_write()
         f = gzip.GzipFile(self.filename, 'r')
-        self.assertTrue(f.myfileobj.mode.startswith('r'))
+        self.assertEqual(f.myfileobj.mode, 'rb')
         f.close()
 
     def test_1647484(self):
index 79cfd8a686e36819d02c5615cefea4158d984cd9..58203ed2ff03ce707749a79381ead88d30098566 100644 (file)
@@ -1266,7 +1266,7 @@ class MiscIOTest(unittest.TestCase):
 
     def test_attributes(self):
         f = io.open(support.TESTFN, "wb", buffering=0)
-        self.assertEquals(f.mode, "w")
+        self.assertEquals(f.mode, "wb")
         f.close()
 
         f = io.open(support.TESTFN, "U")
@@ -1274,18 +1274,18 @@ class MiscIOTest(unittest.TestCase):
         self.assertEquals(f.buffer.name,     support.TESTFN)
         self.assertEquals(f.buffer.raw.name, support.TESTFN)
         self.assertEquals(f.mode,            "U")
-        self.assertEquals(f.buffer.mode,     "r")
-        self.assertEquals(f.buffer.raw.mode, "r")
+        self.assertEquals(f.buffer.mode,     "rb")
+        self.assertEquals(f.buffer.raw.mode, "rb")
         f.close()
 
         f = io.open(support.TESTFN, "w+")
         self.assertEquals(f.mode,            "w+")
-        self.assertEquals(f.buffer.mode,     "r+") # Does it really matter?
-        self.assertEquals(f.buffer.raw.mode, "r+")
+        self.assertEquals(f.buffer.mode,     "rb+") # Does it really matter?
+        self.assertEquals(f.buffer.raw.mode, "rb+")
 
         g = io.open(f.fileno(), "wb", closefd=False)
-        self.assertEquals(g.mode,     "w")
-        self.assertEquals(g.raw.mode, "w")
+        self.assertEquals(g.mode,     "wb")
+        self.assertEquals(g.raw.mode, "wb")
         self.assertEquals(g.name,     f.fileno())
         self.assertEquals(g.raw.name, f.fileno())
         f.close()
index b2323fe7fd2e34e76343f0b184702efef08a2ac2..51f41a9f2efa62904c377229f2058cf4c635b6cc 100644 (file)
@@ -849,11 +849,11 @@ class FileObjectClassTestCase(SocketConnectedTest):
         self.assert_(not self.cli_file.closed)
 
     def testAttributes(self):
-        self.assertEqual(self.serv_file.mode, 'r')
+        self.assertEqual(self.serv_file.mode, 'rb')
         self.assertEqual(self.serv_file.name, self.cli_conn.fileno())
 
     def _testAttributes(self):
-        self.assertEqual(self.cli_file.mode, 'w')
+        self.assertEqual(self.cli_file.mode, 'wb')
         self.assertEqual(self.cli_file.name, self.serv_conn.fileno())
 
 class UnbufferedFileObjectClassTestCase(FileObjectClassTestCase):
index 1e61e549dae1548b95f3a5240fea0e4aa7c473bc..4e797b211d64d5628a26c1f0dabebacbf6624e6b 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -48,6 +48,8 @@ Core and Builtins
 Library
 -------
 
+- FileIO's mode attribute now always includes ``"b"``.
+
 - Issue #3799: Fix dbm.dumb to accept strings as well as bytes for keys. String
   keys are now written out in UTF-8.
 
index 2cec2132235d68b36c8a62082cb5ce9bcd3c2fd9..0a34eb3be5ffc22be453dfe2d937fa1d766edb6a 100644 (file)
@@ -208,6 +208,8 @@ fileio_init(PyObject *oself, PyObject *args, PyObject *kwds)
                        flags |= O_CREAT;
                        append = 1;
                        break;
+               case 'b':
+                       break;
                case '+':
                        if (plus)
                                goto bad_mode;
@@ -682,12 +684,12 @@ mode_string(PyFileIOObject *self)
 {
        if (self->readable) {
                if (self->writable)
-                       return "r+";
+                       return "rb+";
                else
-                       return "r";
+                       return "rb";
        }
        else
-               return "w";
+               return "wb";
 }
 
 static PyObject *