[Python-checkins] cpython: Issue #17401: document closefd in io.FileIO docs and add to repr

robert.collins python-checkins at python.org
Sat Oct 18 02:39:03 CEST 2014


https://hg.python.org/cpython/rev/a1500e4a159a
changeset:   93125:a1500e4a159a
user:        Robert Collins <rbtcollins at hp.com>
date:        Sat Oct 18 13:32:43 2014 +1300
summary:
  Issue #17401: document closefd in io.FileIO docs and add to repr

closefd was documented in the open docs but not the matching FileIO
class documented. Further, closefd, part of the core state for the
object was not shown.

In review it was noted that the open docs are a little confusing about
the interaction between closefd and paths, so tweaked them at the same
time.

files:
  Doc/library/functions.rst |   4 ++--
  Doc/library/io.rst        |   7 +++++--
  Lib/test/test_fileio.py   |  10 ++++++----
  Misc/NEWS                 |   2 ++
  Modules/_io/fileio.c      |  10 ++++++----
  5 files changed, 21 insertions(+), 12 deletions(-)


diff --git a/Doc/library/functions.rst b/Doc/library/functions.rst
--- a/Doc/library/functions.rst
+++ b/Doc/library/functions.rst
@@ -995,8 +995,8 @@
 
    If *closefd* is ``False`` and a file descriptor rather than a filename was
    given, the underlying file descriptor will be kept open when the file is
-   closed.  If a filename is given *closefd* has no effect and must be ``True``
-   (the default).
+   closed.  If a filename is given *closefd* must be ``True`` (the default)
+   otherwise an error will be raised.
 
    A custom opener can be used by passing a callable as *opener*. The underlying
    file descriptor for the file object is then obtained by calling *opener* with
diff --git a/Doc/library/io.rst b/Doc/library/io.rst
--- a/Doc/library/io.rst
+++ b/Doc/library/io.rst
@@ -519,9 +519,12 @@
    The *name* can be one of two things:
 
    * a character string or :class:`bytes` object representing the path to the
-     file which will be opened;
+     file which will be opened. In this case closefd must be True (the default)
+     otherwise an error will be raised.
    * an integer representing the number of an existing OS-level file descriptor
-     to which the resulting :class:`FileIO` object will give access.
+     to which the resulting :class:`FileIO` object will give access. When the
+     FileIO object is closed this fd will be closed as well, unless *closefd*
+     is set to ``False``.
 
    The *mode* can be ``'r'``, ``'w'``, ``'x'`` or ``'a'`` for reading
    (default), writing, exclusive creation or appending. The file will be
diff --git a/Lib/test/test_fileio.py b/Lib/test/test_fileio.py
--- a/Lib/test/test_fileio.py
+++ b/Lib/test/test_fileio.py
@@ -112,11 +112,13 @@
         self.assertRaises(TypeError, self.f.write, "Hello!")
 
     def testRepr(self):
-        self.assertEqual(repr(self.f), "<_io.FileIO name=%r mode=%r>"
-                                        % (self.f.name, self.f.mode))
+        self.assertEqual(
+            repr(self.f), "<_io.FileIO name=%r mode=%r closefd='%d'>"
+                          % (self.f.name, self.f.mode, self.f.closefd))
         del self.f.name
-        self.assertEqual(repr(self.f), "<_io.FileIO fd=%r mode=%r>"
-                                        % (self.f.fileno(), self.f.mode))
+        self.assertEqual(
+            repr(self.f), "<_io.FileIO fd=%r mode=%r closefd='%d'>"
+                          % (self.f.fileno(), self.f.mode, self.f.closefd))
         self.f.close()
         self.assertEqual(repr(self.f), "<_io.FileIO [closed]>")
 
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -196,6 +196,8 @@
 - Issue #22641: In asyncio, the default SSL context for client connections
   is now created using ssl.create_default_context(), for stronger security.
 
+- Issue #17401: Include closefd in io.FileIO repr.
+
 - Issue #21338: Add silent mode for compileall. quiet parameters of
   compile_{dir, file, path} functions now have a multilevel value. Also,
   -q option of the CLI now have a multilevel value. Patch by Thomas Kluyver.
diff --git a/Modules/_io/fileio.c b/Modules/_io/fileio.c
--- a/Modules/_io/fileio.c
+++ b/Modules/_io/fileio.c
@@ -1054,12 +1054,14 @@
             PyErr_Clear();
         else
             return NULL;
-        res = PyUnicode_FromFormat("<_io.FileIO fd=%d mode='%s'>",
-                                   self->fd, mode_string(self));
+        res = PyUnicode_FromFormat(
+	    "<_io.FileIO fd=%d mode='%s' closefd='%d'>",
+	    self->fd, mode_string(self), self->closefd);
     }
     else {
-        res = PyUnicode_FromFormat("<_io.FileIO name=%R mode='%s'>",
-                                   nameobj, mode_string(self));
+        res = PyUnicode_FromFormat(
+	    "<_io.FileIO name=%R mode='%s' closefd='%d'>",
+	    nameobj, mode_string(self), self->closefd);
         Py_DECREF(nameobj);
     }
     return res;

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


More information about the Python-checkins mailing list