Upgrading wsgi to also ignore tpooled AlreadyHandled results (because isinstance delibarately doesn't work on Proxy objects).

This commit is contained in:
Ryan Williams
2010-06-21 17:22:32 -07:00
parent c7b47b2f97
commit 38b96d167d
2 changed files with 16 additions and 6 deletions

View File

@@ -333,7 +333,8 @@ class HttpProtocol(BaseHTTPServer.BaseHTTPRequestHandler):
try:
try:
result = self.application(self.environ, start_response)
if isinstance(result, _AlreadyHandled):
if (isinstance(result, _AlreadyHandled)
or isinstance(getattr(result, '_obj', None), _AlreadyHandled)):
self.close_connection = 1
return
if not headers_sent and hasattr(result, '__len__') and \

View File

@@ -93,13 +93,13 @@ class IterableApp(object):
return self.return_val
class IterableSite(Site):
def __call__(self, env, start_response):
iter = self.application(env, start_response)
for i in iter:
it = self.application(env, start_response)
for i in it:
yield i
CONTENT_LENGTH = 'content-length'
@@ -899,12 +899,14 @@ def read_headers(sock):
return response_line, headers
class IterableAlreadyHandledTest(_TestBase):
def set_site(self):
self.site = IterableSite()
def get_app(self):
return IterableApp(True)
def test_iterable_app_keeps_socket_open_unless_connection_close_sent(self):
self.site.application = IterableApp(True)
self.site.application = self.get_app()
sock = eventlet.connect(
('localhost', self.port))
@@ -922,6 +924,13 @@ class IterableAlreadyHandledTest(_TestBase):
self.assertEqual(headers.get('transfer-encoding'), 'chunked')
self.assertEqual(body, '0\r\n\r\n') # Still coming back chunked
class ProxiedIterableAlreadyHandledTest(IterableAlreadyHandledTest):
# same thing as the previous test but ensuring that it works with tpooled
# results as well as regular ones
def get_app(self):
from eventlet import tpool
return tpool.Proxy(super(ProxiedIterableAlreadyHandledTest, self).get_app())
class TestChunkedInput(_TestBase):
dirt = ""
validator = None