Kaydet (Commit) e97a24d0 authored tarafından Antoine Pitrou's avatar Antoine Pitrou

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

Patch by Brent Tubbs.
üst c859bd2b
...@@ -591,40 +591,28 @@ class HandlerTests(TestCase): ...@@ -591,40 +591,28 @@ class HandlerTests(TestCase):
(stdpat%(version,sw), h.stdout.getvalue()) (stdpat%(version,sw), 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():
test_support.run_unittest(__name__) test_support.run_unittest(__name__)
if __name__ == "__main__": if __name__ == "__main__":
test_main() test_main()
# the above lines intentionally left blank
...@@ -122,10 +122,12 @@ class BaseHandler: ...@@ -122,10 +122,12 @@ class BaseHandler:
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()
......
...@@ -985,6 +985,7 @@ Richard Townsend ...@@ -985,6 +985,7 @@ Richard Townsend
Laurence Tratt Laurence Tratt
John Tromp John Tromp
Jason Trowbridge Jason Trowbridge
Brent Tubbs
Anthony Tuininga Anthony Tuininga
David Turner David Turner
Stephen Turner Stephen Turner
......
...@@ -122,6 +122,9 @@ Core and Builtins ...@@ -122,6 +122,9 @@ Core and Builtins
Library Library
------- -------
- Issue #16220: wsgiref now always calls close() on an iterable response.
Patch by Brent Tubbs.
- Issue #16176: Properly identify Windows 8 via platform.platform() - Issue #16176: Properly identify Windows 8 via platform.platform()
- Issue #15756: subprocess.poll() now properly handles errno.ECHILD to - Issue #15756: subprocess.poll() now properly handles errno.ECHILD to
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment