Added response arg for post_request hook.

This commit is contained in:
Konstantin Enchant 2012-12-14 12:21:58 +04:00 committed by benoitc
parent 3118b08b99
commit aac56c9d55
4 changed files with 37 additions and 10 deletions

View File

@ -315,12 +315,14 @@ def validate_post_request(val):
val = validate_callable(-1)(val)
largs = len(inspect.getargspec(val)[0])
if largs == 3:
if largs == 4:
return val
elif largs == 3:
return lambda worker, req, env, _r: val(worker, req, env)
elif largs == 2:
return lambda worker, req, _: val(worker, req)
return lambda worker, req, _e, _r: val(worker, req)
else:
raise TypeError("Value must have an arity of: 3")
raise TypeError("Value must have an arity of: 4")
@ -1022,7 +1024,7 @@ class PostRequest(Setting):
section = "Server Hooks"
validator = validate_post_request
type = "callable"
def post_request(worker, req, environ):
def post_request(worker, req, environ, resp):
pass
default = staticmethod(post_request)
desc = """\

View File

@ -74,6 +74,8 @@ class AsyncWorker(base.Worker):
def handle_request(self, listener, req, sock, addr):
request_start = datetime.now()
environ = {}
resp = None
try:
self.cfg.pre_request(self, req)
resp, environ = wsgi.create(req, sock, addr,
@ -103,7 +105,7 @@ class AsyncWorker(base.Worker):
raise StopIteration()
finally:
try:
self.cfg.post_request(self, req, environ)
except:
pass
self.cfg.post_request(self, req, environ, resp)
except Exception:
self.log.exception("Exception in post_request hook")
return True

View File

@ -107,6 +107,7 @@ class SyncWorker(base.Worker):
def handle_request(self, listener, req, client, addr):
environ = {}
resp = None
try:
self.cfg.pre_request(self, req)
request_start = datetime.now()
@ -141,6 +142,6 @@ class SyncWorker(base.Worker):
return
finally:
try:
self.cfg.post_request(self, req, environ)
except:
pass
self.cfg.post_request(self, req, environ, resp)
except Exception:
self.log.exception("Exception in post_request hook")

View File

@ -192,3 +192,25 @@ def test_cli_overrides_config():
app = NoConfigApp()
t.eq(app.cfg.bind, ["blarney"])
t.eq(app.cfg.proc_name, "fooey")
def test_post_request():
c = config.Config()
def post_request_4(worker, req, environ, resp):
return 4
def post_request_3(worker, req, environ):
return 3
def post_request_2(worker, req):
return 2
c.set("post_request", post_request_4)
t.eq(4, c.post_request(1, 2, 3, 4))
c.set("post_request", post_request_3)
t.eq(3, c.post_request(1, 2, 3, 4))
c.set("post_request", post_request_2)
t.eq(2, c.post_request(1, 2, 3, 4))