(original) (raw)

changeset: 88522:13d04a8713ad user: Brett Cannon brett@python.org date: Fri Jan 17 11:03:19 2014 -0500 files: Doc/library/cgi.rst Doc/whatsnew/3.4.rst description: Issue #18394: Document that cgi.FieldStorage now cleans up after its 'file' attribute properly in Python 3.4. Thanks to Marcel Hellkamp for pointing out the oversight. diff -r c6cec8805322 -r 13d04a8713ad Doc/library/cgi.rst --- a/Doc/library/cgi.rst Fri Jan 17 09:31:19 2014 -0600 +++ b/Doc/library/cgi.rst Fri Jan 17 11:03:19 2014 -0500 @@ -142,9 +142,11 @@ method reads the entire file in memory as bytes. This may not be what you want. You can test for an uploaded file by testing either the :attr:`~FieldStorage.filename` attribute or the :attr:`~FieldStorage.file` -attribute. You can then read the data at leisure from the :attr:`!file` -attribute (the :func:`~io.RawIOBase.read` and :func:`~io.IOBase.readline` -methods will return bytes):: +attribute. You can then read the data from the :attr:`!file` +attribute before it is automatically closed as part of the garbage collection of +the :class:`FieldStorage` instance +(the :func:`~io.RawIOBase.read` and :func:`~io.IOBase.readline` methods will +return bytes):: fileitem = form["userfile"] if fileitem.file: @@ -176,6 +178,11 @@ A form submitted via POST that also has a query string will contain both :class:`FieldStorage` and :class:`MiniFieldStorage` items. +.. versionchanged:: 3.4 + The :attr:`~FieldStorage.file` attribute is automatically closed upon the + garbage collection of the creating :class:`FieldStorage` instance. + + Higher Level Interface ---------------------- diff -r c6cec8805322 -r 13d04a8713ad Doc/whatsnew/3.4.rst --- a/Doc/whatsnew/3.4.rst Fri Jan 17 09:31:19 2014 -0600 +++ b/Doc/whatsnew/3.4.rst Fri Jan 17 11:03:19 2014 -0500 @@ -1560,6 +1560,13 @@ :issue:`18011`.) Note: this change was also inadvertently applied in Python 3.3.3. +* The :attr:`~cgi.FieldStorage.file` attribute is now automatically closed when + the creating :class:`cgi.FieldStorage` instance is garbage collected. If you + were pulling the file object out separately from the :class:`cgi.FieldStorage` + instance and not keeping the instance alive, then you should either store the + entire :class:`cgi.FieldStorage` instance or read the contents of the file + before the :class:`cgi.FieldStorage` instance is garbage collected. + Changes in the C API -------------------- /brett@python.org