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())
-