comparison webob_view/template/+package+/dispatcher.py @ 5:f70d8f3aee51

allow app argument to allow use as middleware OOTB
author k0s <k0scist@gmail.com>
date Sun, 27 Dec 2009 16:38:50 -0500
parents 4dcb932065e4
children
comparison
equal deleted inserted replaced
4:ee9ed5875df0 5:f70d8f3aee51
6 from webob import Request, exc 6 from webob import Request, exc
7 7
8 class Dispatcher(object): 8 class Dispatcher(object):
9 9
10 ### class level variables 10 ### class level variables
11 defaults = {} 11 defaults = { 'app': None}
12 12
13 def __init__(self, **kw): 13 def __init__(self, **kw):
14 for key in self.defaults: 14 for key in self.defaults:
15 setattr(self, key, kw.get(key, self.defaults[key])) 15 setattr(self, key, kw.get(key, self.defaults[key]))
16 self.handlers = [ Get, Post ] 16 self.handlers = [ Get, Post ]
17 if self.app:
18 assert hasattr(self.app, '__call__')
17 19
18 ### methods dealing with HTTP 20 ### methods dealing with HTTP
19 def __call__(self, environ, start_response): 21 def __call__(self, environ, start_response):
20 request = Request(environ) 22 request = Request(environ)
21 for h in self.handlers: 23 for h in self.handlers:
22 if h.match(request): 24 if h.match(request):
23 handler = h(request) 25 handler = h(request)
24 break 26 break
25 else: 27 else:
28 if self.app:
29 return self.app(environ, start_response)
26 handler = exc.HTTPNotFound 30 handler = exc.HTTPNotFound
27 res = handler() 31 res = handler()
28 return res(environ, start_response) 32 return res(environ, start_response)