diff options
author | richard <devnull@localhost> | 2006-07-07 15:28:24 +0000 |
---|---|---|
committer | richard <devnull@localhost> | 2006-07-07 15:28:24 +0000 |
commit | 6d1c8d3d6607aa3190490586586dc2548aba22fd (patch) | |
tree | 6c5e5a9c579e2e8171af3cc7bc24a8ba2a466f9f /pypi.py | |
parent | c36a3c2dc4995f0fffd98f7355ad79b55e1ce8f7 (diff) | |
download | decorator-6d1c8d3d6607aa3190490586586dc2548aba22fd.tar.gz |
mod_python support
Diffstat (limited to 'pypi.py')
-rwxr-xr-x | pypi.py | 54 |
1 files changed, 54 insertions, 0 deletions
@@ -0,0 +1,54 @@ +#!/usr/bin/python +# +# $Id$ + +from mod_python import apache +import sys, os, cgi, StringIO, traceback +from BaseHTTPServer import BaseHTTPRequestHandler, DEFAULT_ERROR_MESSAGE +from webui import WebUI +import config + +class RequestWrapper: + '''Used to make the CGI server look like a BaseHTTPRequestHandler + ''' + def __init__(self, config, rfile, wfile): + self.wfile = wfile + self.rfile = rfile + self.config = config + def send_response(self, code, message=''): + self.wfile.status = code + def send_header(self, keyword, value): + self.wfile.headers_out[keyword] = value + def end_headers(self): + pass + +def handle(req): + req.content_type = req.headers_out['Content-Type'] = 'text/html' + cfg = config.Config('/Users/richard/src/pypi/pypi/config.ini', 'webui') + s = req.read() + rfile = StringIO.StringIO(s) + request = RequestWrapper(cfg, rfile, req) + pseudoenv = {} + pseudoenv['CONTENT_TYPE'] = req.headers_in.get('content-type', '') + pseudoenv['REMOTE_ADDR'] = req.get_remote_host(apache.REMOTE_NOLOOKUP) + pseudoenv['HTTP_USER_AGENT'] = req.headers_in.get('user-agent', '') + pseudoenv['QUERY_STRING'] = req.args + pseudoenv['HTTP_CGI_AUTHORIZATION'] = req.headers_in.get('authorization', + '') + pseudoenv['REQUEST_METHOD'] = req.method + path_info = req.path_info + pseudoenv['PATH_INFO'] = path_info + try: + handler = WebUI(request, pseudoenv) + handler.run() + except: + s = StringIO.StringIO() + traceback.print_exc(None, s) + req.write("<pre>") + req.write(cgi.escape(s.getvalue())) + req.write("</pre>") + req.headers_out['Content-Type'] = 'text/html' + req.content_type = req.headers_out['Content-Type'] + return apache.OK + +# vim: set filetype=python ts=4 sw=4 et si |