Mercurial > hg > genshi_view
view genshi_view/template/+package+/dispatcher.py @ 2:b8e5471794b2
move to a dispatcher architecture
author | k0s <k0scist@gmail.com> |
---|---|
date | Thu, 05 Nov 2009 23:15:37 -0500 |
parents | genshi_view/template/+package+/+package+.py_tmpl@d9519f40c177 |
children | 0be8714e4d6a |
line wrap: on
line source
""" request dispatcher """ from handlers import Index from genshi.template import TemplateLoader from paste.fileapp import FileApp from pkg_resources import resource_filename from webob import Request, Response, exc class Dispatcher(object): ### class level variables defaults = { 'auto_reload': 'False'} def __init__(self, **kw): # set instance parameters from kw and defaults for key in self.defaults: setattr(self, key, kw.get(key, self.defaults[key])) # self.auto_reload = self.auto_reload.lower() == 'true' self.handlers = [ Index ] # static files self.htdocs = resource_filename(__name__, 'static') # template loader # to move??? # 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): 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) # match the request to a handler for h in self.handlers: handler = h.match(request) if handler is not None: break else: handler = exc.HTTPNotFound res = handler() return res(environ, start_response)