Mercurial > hg > simpypi
view simpypi/factory.py @ 4:7caedb575794
serve multiple directories
author | Jeff Hammel <jhammel@mozilla.com> |
---|---|
date | Mon, 27 Feb 2012 16:20:08 -0800 |
parents | f5360bb59e41 |
children | 39080c0f1b08 |
line wrap: on
line source
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, *directories): self.app = app missing = [i for i in directories if not os.path.exists(i) or not os.path.isdir(i)] assert not missing, "Missing directories: %s" % missing self.directories = [(directory, StaticURLParser(directory)) for directory in directories] def __call__(self, environ, start_response): path = environ['PATH_INFO'].strip('/') for directory, fileserver in self.directories: if path and os.path.exists(os.path.join(directory, path)): return fileserver(environ, start_response) return self.app(environ, start_response) def factory(**app_conf): """create a webob view and wrap it in middleware""" directory = app_conf['directory'] app = Dispatcher(**app_conf) return PassthroughFileserver(app, resource_filename(__name__, 'static')) if __name__ == '__main__': import shutil import tempfile from wsgiref import simple_server tempdir = tempfile.mkdtemp() try: app = factory(directory=tempdir) server = simple_server.make_server(host='0.0.0.0', port=8080, app=app) server.serve_forever() finally: shutil.rmtree(tempdir)