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):
|
def timeout_ctx(self):
|
||||||
raise NotImplementedError()
|
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):
|
def handle(self, listener, client, addr):
|
||||||
req = None
|
req = None
|
||||||
try:
|
try:
|
||||||
@ -101,7 +105,7 @@ class AsyncWorker(base.Worker):
|
|||||||
resp.force_close()
|
resp.force_close()
|
||||||
|
|
||||||
respiter = self.wsgi(environ, resp.start_response)
|
respiter = self.wsgi(environ, resp.start_response)
|
||||||
if respiter == ALREADY_HANDLED:
|
if self.is_already_handled(respiter):
|
||||||
return False
|
return False
|
||||||
try:
|
try:
|
||||||
if isinstance(respiter, environ['wsgi.file_wrapper']):
|
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 import hubs, greenthread
|
||||||
from eventlet.greenio import GreenSocket
|
from eventlet.greenio import GreenSocket
|
||||||
from eventlet.hubs import trampoline
|
from eventlet.hubs import trampoline
|
||||||
|
from eventlet.wsgi import ALREADY_HANDLED as EVENTLET_ALREADY_HANDLED
|
||||||
import greenlet
|
import greenlet
|
||||||
|
|
||||||
from gunicorn.http.wsgi import sendfile as o_sendfile
|
from gunicorn.http.wsgi import sendfile as o_sendfile
|
||||||
@ -91,6 +92,12 @@ class EventletWorker(AsyncWorker):
|
|||||||
eventlet.monkey_patch(os=False)
|
eventlet.monkey_patch(os=False)
|
||||||
patch_sendfile()
|
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):
|
def init_process(self):
|
||||||
self.patch()
|
self.patch()
|
||||||
super(EventletWorker, self).init_process()
|
super(EventletWorker, self).init_process()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user