Issue #16220: wsgiref now always calls close() on an iterable response.

Patch by Brent Tubbs.
This commit is contained in:
Antoine Pitrou 2012-10-21 14:09:05 +02:00
parent 2778d0d147
commit ae247a5ff6
4 changed files with 29 additions and 36 deletions

View File

@ -656,40 +656,27 @@ def app(e, s):
b"data", b"data",
h.stdout.getvalue()) h.stdout.getvalue())
# This epilogue is needed for compatibility with the Python 2.5 regrtest module def testCloseOnError(self):
side_effects = {'close_called': False}
MSG = b"Some output has been sent"
def error_app(e,s):
s("200 OK",[])(MSG)
class CrashyIterable(object):
def __iter__(self):
while True:
yield b'blah'
raise AssertionError("This should be caught by handler")
def close(self):
side_effects['close_called'] = True
return CrashyIterable()
h = ErrorHandler()
h.run(error_app)
self.assertEqual(side_effects['close_called'], True)
def test_main(): def test_main():
support.run_unittest(__name__) support.run_unittest(__name__)
if __name__ == "__main__": if __name__ == "__main__":
test_main() test_main()
# the above lines intentionally left blank

View File

@ -174,10 +174,12 @@ def finish_response(self):
in the event loop to iterate over the data, and to call in the event loop to iterate over the data, and to call
'self.close()' once the response is finished. 'self.close()' once the response is finished.
""" """
try:
if not self.result_is_file() or not self.sendfile(): if not self.result_is_file() or not self.sendfile():
for data in self.result: for data in self.result:
self.write(data) self.write(data)
self.finish_content() self.finish_content()
finally:
self.close() self.close()

View File

@ -1067,6 +1067,7 @@ Richard Townsend
Laurence Tratt Laurence Tratt
John Tromp John Tromp
Jason Trowbridge Jason Trowbridge
Brent Tubbs
Anthony Tuininga Anthony Tuininga
Erno Tukia Erno Tukia
David Turner David Turner

View File

@ -132,6 +132,9 @@ Core and Builtins
Library Library
------- -------
- Issue #16220: wsgiref now always calls close() on an iterable response.
Patch by Brent Tubbs.
- Issue #16270: urllib may hang when used for retrieving files via FTP by using - Issue #16270: urllib may hang when used for retrieving files via FTP by using
a context manager. Patch by Giampaolo Rodola'. a context manager. Patch by Giampaolo Rodola'.