Mercurial > hg > webob_view
diff webob_view/template/+package+/+package+.py_tmpl @ 1:eb2cb7ebc849
moving to a handler architecture
author | k0s <k0scist@gmail.com> |
---|---|
date | Thu, 29 Oct 2009 15:08:54 -0400 |
parents | 72cb6dc31e3f |
children |
line wrap: on
line diff
--- a/webob_view/template/+package+/+package+.py_tmpl Tue Oct 27 15:04:33 2009 -0400 +++ b/webob_view/template/+package+/+package+.py_tmpl Thu Oct 29 15:08:54 2009 -0400 @@ -2,9 +2,10 @@ ${repr(project)}: a view with webob """ -from webob import Request, Response, exc +from handlers import Get, Post +from webob import Request, exc -class View(object): +class Dispatcher(object): ### class level variables defaults = {} @@ -12,36 +13,14 @@ def __init__(self, **kw): for key in self.defaults: setattr(self, key, kw.get(key, self.defaults[key])) - self.response_functions = { 'GET': self.get, - 'POST': self.post, - } + self.handlers = [ Get, Post ] ### methods dealing with HTTP def __call__(self, environ, start_response): request = Request(environ) - res = self.make_response(request) + for h in self.handlers: + if h.match(request): + handler = h(request) + break + res = handler() return res(environ, start_response) - - def make_response(self, request): - return self.response_functions.get(request.method, self.error)(request) - - def get_response(self, text, content_type='text/html'): - res = Response(content_type=content_type, body=text) - return res - - def get(self, request): - """ - return response to a GET requst - """ - return self.get_response('Hello, world') - - def post(self, request): - """ - return response to a POST request - """ - return exc.HTTPOk("Ok") - - def error(self, request): - """deal with non-supported methods""" - return exc.HTTPMethodNotAllowed("Only %r operations are allowed" % self.response_functions.keys()) -