Issue #16220: wsgiref now always calls close() on an iterable response.
Patch by Brent Tubbs.
This commit is contained in:
parent
2778d0d147
commit
ae247a5ff6
|
@ -656,40 +656,27 @@ class HandlerTests(TestCase):
|
|||
b"data",
|
||||
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():
|
||||
support.run_unittest(__name__)
|
||||
|
||||
if __name__ == "__main__":
|
||||
test_main()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# the above lines intentionally left blank
|
||||
|
|
|
@ -174,11 +174,13 @@ class BaseHandler:
|
|||
in the event loop to iterate over the data, and to call
|
||||
'self.close()' once the response is finished.
|
||||
"""
|
||||
if not self.result_is_file() or not self.sendfile():
|
||||
for data in self.result:
|
||||
self.write(data)
|
||||
self.finish_content()
|
||||
self.close()
|
||||
try:
|
||||
if not self.result_is_file() or not self.sendfile():
|
||||
for data in self.result:
|
||||
self.write(data)
|
||||
self.finish_content()
|
||||
finally:
|
||||
self.close()
|
||||
|
||||
|
||||
def get_scheme(self):
|
||||
|
|
|
@ -1067,6 +1067,7 @@ Richard Townsend
|
|||
Laurence Tratt
|
||||
John Tromp
|
||||
Jason Trowbridge
|
||||
Brent Tubbs
|
||||
Anthony Tuininga
|
||||
Erno Tukia
|
||||
David Turner
|
||||
|
|
Loading…
Reference in New Issue