mirror of
https://github.com/frappe/gunicorn.git
synced 2026-01-14 11:09:11 +08:00
add support for eventlets _AlreadyHandled object (#1406)
add support for eventlets _AlreadyHandled - issue 1210 - Response object has no attribute status_code
This commit is contained in:
parent
cc4620fb5b
commit
9430742ba6
@ -27,6 +27,10 @@ class AsyncWorker(base.Worker):
|
||||
def timeout_ctx(self):
|
||||
raise NotImplementedError()
|
||||
|
||||
def is_already_handled(self, respiter):
|
||||
# some workers will need to overload this function to raise a StopIteration
|
||||
return respiter == ALREADY_HANDLED
|
||||
|
||||
def handle(self, listener, client, addr):
|
||||
req = None
|
||||
try:
|
||||
@ -101,7 +105,7 @@ class AsyncWorker(base.Worker):
|
||||
resp.force_close()
|
||||
|
||||
respiter = self.wsgi(environ, resp.start_response)
|
||||
if respiter == ALREADY_HANDLED:
|
||||
if self.is_already_handled(respiter):
|
||||
return False
|
||||
try:
|
||||
if isinstance(respiter, environ['wsgi.file_wrapper']):
|
||||
|
||||
@ -20,6 +20,7 @@ if eventlet.version_info < (0, 9, 7):
|
||||
from eventlet import hubs, greenthread
|
||||
from eventlet.greenio import GreenSocket
|
||||
from eventlet.hubs import trampoline
|
||||
from eventlet.wsgi import ALREADY_HANDLED as EVENTLET_ALREADY_HANDLED
|
||||
import greenlet
|
||||
|
||||
from gunicorn.http.wsgi import sendfile as o_sendfile
|
||||
@ -91,6 +92,12 @@ class EventletWorker(AsyncWorker):
|
||||
eventlet.monkey_patch(os=False)
|
||||
patch_sendfile()
|
||||
|
||||
def is_already_handled(self, respiter):
|
||||
if respiter == EVENTLET_ALREADY_HANDLED:
|
||||
raise StopIteration()
|
||||
else:
|
||||
return super(EventletWorker, self).is_already_handled(respiter)
|
||||
|
||||
def init_process(self):
|
||||
self.patch()
|
||||
super(EventletWorker, self).init_process()
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user