diff genshi_view/template/+package+/dispatcher.py @ 11:8a7731b2126a

include a post method, a nav bar, and some jquery fun
author k0s <k0scist@gmail.com>
date Sat, 07 Nov 2009 22:49:46 -0500
parents 55011632cf03
children 6075ca965357
line wrap: on
line diff
--- a/genshi_view/template/+package+/dispatcher.py	Fri Nov 06 16:58:51 2009 -0500
+++ b/genshi_view/template/+package+/dispatcher.py	Sat Nov 07 22:49:46 2009 -0500
@@ -1,5 +1,6 @@
 """
-request dispatcher
+request dispatcher:
+data persisting across requests should go here
 """
 
 import os
@@ -14,7 +15,8 @@
 class Dispatcher(object):
 
     ### class level variables
-    defaults = { 'auto_reload': 'False'}
+    defaults = { 'auto_reload': 'False',
+                 'name': 'anonymous' }
 
     def __init__(self, **kw):
 
@@ -28,21 +30,22 @@
         # static files
         self.htdocs = resource_filename(__name__, 'static')
 
-        # template loader # to move???
+        # template loader
         templates_dir = resource_filename(__name__, 'templates')
         self.loader = TemplateLoader(templates_dir,
                                      auto_reload=self.auto_reload)
 
     ### methods dealing with HTTP
     def __call__(self, environ, start_response):
+
+        # get a request object
         request = Request(environ)
 
-        # serve static files
-        # TODO: put into a handler
-        filename = os.path.join(self.htdocs, request.path_info)
-        if request.path_info != '/' and os.path.exists(filename):
-            fileapp = FileApp(filename)
-            return fileapp(environ, start_response)
+        # get the path 
+        path = request.path_info.strip('/').split('/')
+        if path == ['']:
+            path = []
+        request.environ['path'] = path
 
         # match the request to a handler
         for h in self.handlers:
@@ -52,6 +55,13 @@
         else:
             handler = exc.HTTPNotFound
 
+        # add navigation links to handler [example]
+        handler.data.setdefault('links', [])
+        for h in self.handlers:
+            handler.data['links'].append((handler.link(h.handler_path), 
+                                          h.__name__))
+
+        # get response
         res = handler()
         return res(environ, start_response)