Mercurial > hg > MakeItSo
diff makeitso/factory.py @ 14:bf1ce840d0f0
make this a genshi view (should be: tempita view)
author | Jeff Hammel <jhammel@mozilla.com> |
---|---|
date | Mon, 15 Nov 2010 08:05:55 -0800 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/makeitso/factory.py Mon Nov 15 08:05:55 2010 -0800 @@ -0,0 +1,31 @@ +import os + +from dispatcher import Dispatcher +from paste.httpexceptions import HTTPExceptionHandler +from paste.urlparser import StaticURLParser +from pkg_resources import resource_filename + +class PassthroughFileserver(object): + """serve files if they exist""" + + def __init__(self, app, directory): + self.app = app + self.directory = directory + self.fileserver = StaticURLParser(self.directory) + + def __call__(self, environ, start_response): + path = environ['PATH_INFO'].strip('/') + if path and os.path.exists(os.path.join(self.directory, path)): + return self.fileserver(environ, start_response) + return self.app(environ, start_response) + +def factory(global_conf, **app_conf): + """create a webob view and wrap it in middleware""" + + keystr = 'MakeItSo/.' + args = dict([(key.split(keystr, 1)[-1], value) + for key, value in app_conf.items() + if key.startswith(keystr) ]) + app = Dispatcher(**args) + return HTTPExceptionHandler(PassthroughFileserver(app, resource_filename(__name__, 'static'))) +