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