mirror of
https://github.com/python/cpython.git
synced 2025-08-31 14:07:50 +00:00
Issue #20289: cgi.FieldStorage() now supports the context management protocol.
This commit is contained in:
parent
088ca8b947
commit
bf5e9604cc
5 changed files with 35 additions and 6 deletions
|
@ -157,6 +157,9 @@ return bytes)::
|
||||||
if not line: break
|
if not line: break
|
||||||
linecount = linecount + 1
|
linecount = linecount + 1
|
||||||
|
|
||||||
|
:class:`FieldStorage` objects also support being used in a :keyword:`with`
|
||||||
|
statement, which will automatically close them when done.
|
||||||
|
|
||||||
If an error is encountered when obtaining the contents of an uploaded file
|
If an error is encountered when obtaining the contents of an uploaded file
|
||||||
(for example, when the user interrupts the form submission by clicking on
|
(for example, when the user interrupts the form submission by clicking on
|
||||||
a Back or Cancel button) the :attr:`~FieldStorage.done` attribute of the
|
a Back or Cancel button) the :attr:`~FieldStorage.done` attribute of the
|
||||||
|
@ -182,6 +185,10 @@ A form submitted via POST that also has a query string will contain both
|
||||||
The :attr:`~FieldStorage.file` attribute is automatically closed upon the
|
The :attr:`~FieldStorage.file` attribute is automatically closed upon the
|
||||||
garbage collection of the creating :class:`FieldStorage` instance.
|
garbage collection of the creating :class:`FieldStorage` instance.
|
||||||
|
|
||||||
|
.. versionchanged:: 3.5
|
||||||
|
Added support for the context management protocol to the
|
||||||
|
:class:`FieldStorage` class.
|
||||||
|
|
||||||
|
|
||||||
Higher Level Interface
|
Higher Level Interface
|
||||||
----------------------
|
----------------------
|
||||||
|
|
|
@ -136,6 +136,12 @@ New Modules
|
||||||
Improved Modules
|
Improved Modules
|
||||||
================
|
================
|
||||||
|
|
||||||
|
cgi
|
||||||
|
---
|
||||||
|
|
||||||
|
* :class:`FieldStorage` now supports the context management protocol.
|
||||||
|
(Contributed by Berker Peksag in :issue:`20289`.)
|
||||||
|
|
||||||
code
|
code
|
||||||
----
|
----
|
||||||
|
|
||||||
|
|
|
@ -566,6 +566,12 @@ class FieldStorage:
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
def __enter__(self):
|
||||||
|
return self
|
||||||
|
|
||||||
|
def __exit__(self, *args):
|
||||||
|
self.file.close()
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
"""Return a printable representation."""
|
"""Return a printable representation."""
|
||||||
return "FieldStorage(%r, %r, %r)" % (
|
return "FieldStorage(%r, %r, %r)" % (
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from test.support import run_unittest, check_warnings
|
from test.support import check_warnings
|
||||||
import cgi
|
import cgi
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
@ -307,6 +307,17 @@ Content-Type: text/plain
|
||||||
got = getattr(files[x], k)
|
got = getattr(files[x], k)
|
||||||
self.assertEqual(got, exp)
|
self.assertEqual(got, exp)
|
||||||
|
|
||||||
|
def test_fieldstorage_as_context_manager(self):
|
||||||
|
fp = BytesIO(b'x' * 10)
|
||||||
|
env = {'REQUEST_METHOD': 'PUT'}
|
||||||
|
with cgi.FieldStorage(fp=fp, environ=env) as fs:
|
||||||
|
content = fs.file.read()
|
||||||
|
self.assertFalse(fs.file.closed)
|
||||||
|
self.assertTrue(fs.file.closed)
|
||||||
|
self.assertEqual(content, 'x' * 10)
|
||||||
|
with self.assertRaisesRegex(ValueError, 'I/O operation on closed file'):
|
||||||
|
fs.file.read()
|
||||||
|
|
||||||
_qs_result = {
|
_qs_result = {
|
||||||
'key1': 'value1',
|
'key1': 'value1',
|
||||||
'key2': ['value2x', 'value2y'],
|
'key2': ['value2x', 'value2y'],
|
||||||
|
@ -481,9 +492,5 @@ Content-Transfer-Encoding: binary
|
||||||
--AaB03x--
|
--AaB03x--
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
def test_main():
|
|
||||||
run_unittest(CgiTests)
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
test_main()
|
unittest.main()
|
||||||
|
|
|
@ -235,6 +235,9 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #20289: cgi.FieldStorage() now supports the context management
|
||||||
|
protocol.
|
||||||
|
|
||||||
- Issue #13128: Print response headers for CONNECT requests when debuglevel
|
- Issue #13128: Print response headers for CONNECT requests when debuglevel
|
||||||
> 0. Patch by Demian Brecht.
|
> 0. Patch by Demian Brecht.
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue