#!/usr/bin/env python """ A WSGI wrapper for Quixote applications, and a standalone interface to WSGI Utils' multi-threaded HTTP server. To run the Quixote demos or your own application using wsgiutils' HTTP server: wsgi_server.py wsgi_server.py --factory=quixote.demo.altdemo.create_publisher wsgi_server.py --factory=quixote.demo.mini_demo.create_publisher wsgi_server.py --help # Shows all options and defaults. and point your browser to http://localhost:8080/ . --factory names a function that returns a Publisher object configured for the desired application. You'll get an ImportError if WSGI Utils is not installed; obtain it from http://www.owlfish.com/software/wsgiutils/ To use your Quixote application with any WSGI server or middleware: from quixote.server.wsgi_server import QWIP wsgi_application = QWIP(create_publisher_function) Authors: Mike Orr and Titus Brown . Last updated 2005-04-29. """ from quixote.http_request import HTTPRequest class QWIP: """I make a Quixote Publisher object look like a WSGI application.""" request_class = HTTPRequest def __init__(self, create_publisher_fn): self.publisher = create_publisher_fn() def __call__(self, env, start_response): """I am called for each request.""" if not env.has_key('REQUEST_URI'): env['REQUEST_URI'] = env['SCRIPT_NAME'] + env['PATH_INFO'] input = env['wsgi.input'] request = self.request_class(input, env) response = self.publisher.process_request(request) status = "%03d %s" % (response.status_code, response.reason_phrase) headers = response.generate_headers() start_response(status, headers) return response.generate_body_chunks() # Iterable object. def run(create_publisher, host='', port=80): """Runs a multi-threaded HTTP server publishing a Quixote application via WSGI/QWIP. Depends on WSGI Utils from http://www.owlfish.com/software/wsgiutils/ """ from wsgiutils.wsgiServer import WSGIServer app_map = {'': QWIP(create_publisher)} httpd = WSGIServer((host, port), app_map, serveFiles=False) httpd.serve_forever() if __name__ == '__main__': from quixote.server.util import main main(run)