Mercurial > hg > webob_view
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) |