comparison 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
comparison
equal deleted inserted replaced
0:72cb6dc31e3f 1:eb2cb7ebc849
1 """ 1 """
2 ${repr(project)}: a view with webob 2 ${repr(project)}: a view with webob
3 """ 3 """
4 4
5 from webob import Request, Response, exc 5 from handlers import Get, Post
6 from webob import Request, exc
6 7
7 class View(object): 8 class Dispatcher(object):
8 9
9 ### class level variables 10 ### class level variables
10 defaults = {} 11 defaults = {}
11 12
12 def __init__(self, **kw): 13 def __init__(self, **kw):
13 for key in self.defaults: 14 for key in self.defaults:
14 setattr(self, key, kw.get(key, self.defaults[key])) 15 setattr(self, key, kw.get(key, self.defaults[key]))
15 self.response_functions = { 'GET': self.get, 16 self.handlers = [ Get, Post ]
16 'POST': self.post,
17 }
18 17
19 ### methods dealing with HTTP 18 ### methods dealing with HTTP
20 def __call__(self, environ, start_response): 19 def __call__(self, environ, start_response):
21 request = Request(environ) 20 request = Request(environ)
22 res = self.make_response(request) 21 for h in self.handlers:
22 if h.match(request):
23 handler = h(request)
24 break
25 res = handler()
23 return res(environ, start_response) 26 return res(environ, start_response)
24
25 def make_response(self, request):
26 return self.response_functions.get(request.method, self.error)(request)
27
28 def get_response(self, text, content_type='text/html'):
29 res = Response(content_type=content_type, body=text)
30 return res
31
32 def get(self, request):
33 """
34 return response to a GET requst
35 """
36 return self.get_response('Hello, world')
37
38 def post(self, request):
39 """
40 return response to a POST request
41 """
42 return exc.HTTPOk("Ok")
43
44 def error(self, request):
45 """deal with non-supported methods"""
46 return exc.HTTPMethodNotAllowed("Only %r operations are allowed" % self.response_functions.keys())
47