mirror of
https://github.com/frappe/gunicorn.git
synced 2026-01-14 11:09:11 +08:00
Add pre/post request hooks
This commit is contained in:
parent
aca70fbec8
commit
0d67447d19
@ -569,7 +569,8 @@ class Postfork(Setting):
|
||||
The callable needs to accept two instance variables for the Arbiter and
|
||||
new Worker.
|
||||
"""
|
||||
|
||||
|
||||
|
||||
class WhenReady(Setting):
|
||||
name = "when_ready"
|
||||
section = "Server Hooks"
|
||||
@ -584,7 +585,8 @@ class WhenReady(Setting):
|
||||
|
||||
The callable needs to accept a single instance variable for the Arbiter.
|
||||
"""
|
||||
|
||||
|
||||
|
||||
class PreExec(Setting):
|
||||
name = "pre_exec"
|
||||
section = "Server Hooks"
|
||||
@ -599,5 +601,37 @@ class PreExec(Setting):
|
||||
|
||||
The callable needs to accept a single instance variable for the Arbiter.
|
||||
"""
|
||||
|
||||
|
||||
|
||||
class PreRequest(Setting):
|
||||
name = "pre_request"
|
||||
section = "Server Hooks"
|
||||
validator = validate_callable(2)
|
||||
type = "callable"
|
||||
def def_pre_request(worker, req):
|
||||
worker.log.debug("%s %s" % (req.method, req.path))
|
||||
def_pre_request = staticmethod(def_pre_request)
|
||||
default = def_pre_request
|
||||
desc = """\
|
||||
Called just before a worker processes the request.
|
||||
|
||||
The callable needs to accept two instance variables for the Worker and
|
||||
the Request.
|
||||
"""
|
||||
|
||||
|
||||
class PostRequest(Setting):
|
||||
name = "post_request"
|
||||
section = "Server Hooks"
|
||||
validator = validate_callable(2)
|
||||
type = "callable"
|
||||
def def_post_request(worker, req):
|
||||
pass
|
||||
def_post_request = staticmethod(def_post_request)
|
||||
default = def_post_request
|
||||
desc = """\
|
||||
Called after a worker processes the request.
|
||||
|
||||
The callable needs to accept two instance variables for the Worker and
|
||||
the Request.
|
||||
"""
|
||||
|
||||
@ -61,6 +61,7 @@ class AsyncWorker(base.Worker):
|
||||
def handle_request(self, req, sock, addr):
|
||||
try:
|
||||
debug = self.cfg.debug or False
|
||||
self.cfg.pre_request(self, req)
|
||||
resp, environ = wsgi.create(req, sock, addr, self.address,
|
||||
self.cfg)
|
||||
respiter = self.wsgi(environ, resp.start_response)
|
||||
@ -73,6 +74,7 @@ class AsyncWorker(base.Worker):
|
||||
respiter.close()
|
||||
if req.should_close():
|
||||
raise StopIteration()
|
||||
self.cfg.post_request(self, req)
|
||||
except Exception, e:
|
||||
#Only send back traceback in HTTP in debug mode.
|
||||
if not self.debug:
|
||||
|
||||
@ -94,6 +94,7 @@ class SyncWorker(base.Worker):
|
||||
def handle_request(self, req, client, addr):
|
||||
try:
|
||||
debug = self.cfg.debug or False
|
||||
self.cfg.pre_request(self, req)
|
||||
resp, environ = wsgi.create(req, client, addr,
|
||||
self.address, self.cfg)
|
||||
respiter = self.wsgi(environ, resp.start_response)
|
||||
@ -102,6 +103,7 @@ class SyncWorker(base.Worker):
|
||||
resp.close()
|
||||
if hasattr(respiter, "close"):
|
||||
respiter.close()
|
||||
self.cfg.post_request(self, req)
|
||||
except socket.error:
|
||||
raise
|
||||
except Exception, e:
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user