]> granicus.if.org Git - python/commitdiff
#2491: os.fdopen() is now almost an alias to the builtin open(), and accepts the...
authorAmaury Forgeot d'Arc <amauryfa@gmail.com>
Fri, 1 Aug 2008 00:06:49 +0000 (00:06 +0000)
committerAmaury Forgeot d'Arc <amauryfa@gmail.com>
Fri, 1 Aug 2008 00:06:49 +0000 (00:06 +0000)
It just checks that the first argument is a file descriptor.

Lib/os.py
Lib/test/test_urllibnet.py
Misc/NEWS

index a04aa7f58525dbfe1098d318b2c3709571cc3a4f..2fdf6688a94bea970c2c318040197774524df2fb 100644 (file)
--- a/Lib/os.py
+++ b/Lib/os.py
@@ -651,9 +651,9 @@ class _wrap_close:
     def __iter__(self):
         return iter(self._stream)
 
-# Supply os.fdopen() (used by subprocess!)
-def fdopen(fd, mode="r", buffering=-1):
+# Supply os.fdopen()
+def fdopen(fd, *args, **kwargs):
     if not isinstance(fd, int):
         raise TypeError("invalid fd type (%s, expected integer)" % type(fd))
     import io
-    return io.open(fd, mode, buffering)
+    return io.open(fd, *args, **kwargs)
index c8166c4b2d013c6d4c07e7e45e136f3094e2f18f..695541c3acd2e7c110fe8b248de93075d475dd79 100644 (file)
@@ -113,18 +113,14 @@ class urlopenNetworkTests(unittest.TestCase):
         self.assertEqual(code, 404)
 
     def test_fileno(self):
-        if (sys.platform in ('win32',) or
-            not hasattr(os, 'fdopen')):
+        if sys.platform in ('win32',):
             # On Windows, socket handles are not file descriptors; this
             # test can't pass on Windows.
             return
         # Make sure fd returned by fileno is valid.
         open_url = self.urlopen("http://www.python.org/")
         fd = open_url.fileno()
-        # XXX(nnorwitz): There is currently no way to pass errors, encoding,
-        # etc to fdopen. :-(
-        FILE = os.fdopen(fd)
-        FILE._errors = 'ignore'
+        FILE = os.fdopen(fd, encoding='utf-8')
         try:
             self.assert_(FILE.read(), "reading from file created using fd "
                                       "returned by fileno failed")
@@ -156,7 +152,7 @@ class urlretrieveNetworkTests(unittest.TestCase):
         file_location,info = self.urlretrieve("http://www.python.org/")
         self.assert_(os.path.exists(file_location), "file location returned by"
                         " urlretrieve is not a valid path")
-        FILE = open(file_location, errors='ignore')
+        FILE = open(file_location, encoding='utf-8')
         try:
             self.assert_(FILE.read(), "reading from the file location returned"
                          " by urlretrieve failed")
@@ -170,7 +166,7 @@ class urlretrieveNetworkTests(unittest.TestCase):
                                               support.TESTFN)
         self.assertEqual(file_location, support.TESTFN)
         self.assert_(os.path.exists(file_location))
-        FILE = open(file_location, errors='ignore')
+        FILE = open(file_location, encoding='utf-8')
         try:
             self.assert_(FILE.read(), "reading from temporary file failed")
         finally:
index 5f1d90524de7cdc577b27e1dcac45add11929afe..d19984aad3b030fa10358843e33f9cbd5b7a2243 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -18,6 +18,10 @@ Core and Builtins
 Library
 -------
 
+- Issue #2491: os.fdopen is now almost an alias for the built-in open(), and
+  accepts the same parameters.  It just checks that its first argument is an
+  integer.
+
 - Issue #3394: zipfile.writestr sets external attributes when passed a
   file name rather than a ZipInfo instance, so files are extracted with
   mode 0600 rather than 000 under Unix.