diff options
author | martin.von.loewis <devnull@localhost> | 2007-07-04 20:47:27 +0000 |
---|---|---|
committer | martin.von.loewis <devnull@localhost> | 2007-07-04 20:47:27 +0000 |
commit | 1af1a5afbe30815b3d5e1b1a751cb2ce0346f9cd (patch) | |
tree | 85c108e47135cc693ba9249920b28523e3a670a5 /pypi.fcgi | |
parent | 83f79828d208c4e682735994637c842c6a493431 (diff) | |
download | decorator-1af1a5afbe30815b3d5e1b1a751cb2ce0346f9cd.tar.gz |
Add fcgi support
Diffstat (limited to 'pypi.fcgi')
-rwxr-xr-x | pypi.fcgi | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/pypi.fcgi b/pypi.fcgi new file mode 100755 index 0000000..e4c49ae --- /dev/null +++ b/pypi.fcgi @@ -0,0 +1,59 @@ +#!/usr/bin/python +import thfcgi, os, sys, syslog + +# +# Provide interface to CGI HTTP response handling +# +class RequestWrapper: + '''Used to make the FCGI server look like a BaseHTTPRequestHandler + ''' + def __init__(self, config, req): + self.wfile = req.out + self.rfile = req.stdin + self.config = config + def send_response(self, code, message=''): + self.wfile.write('Status: %s %s\r\n'%(code, message)) + def send_header(self, keyword, value): + self.wfile.write("%s: %s\r\n" % (keyword, value)) + def set_content_type(self, content_type): + self.send_header('Content-Type', content_type) + def end_headers(self): + self.wfile.write("\r\n") + +def handle_request(req, env): + syslog.syslog("handling request") + try: + from webui import WebUI + request = RequestWrapper(cfg, req) + syslog.syslog("WebUI") + handler = WebUI(request, env) + handler.run() + except SystemExit: + pass + except: + syslog.syslog("Excetpion") + req.out.write('Status: 500 Internal Server Error\r\n') + req.out.write('Content-Type: text/html\r\n\r\n') + req.out.write("<pre>") + s = StringIO.StringIO() + traceback.print_exc(None, s) + req.out.write(cgi.escape(s.getvalue())) + req.out.write("</pre>\n") + req.finish() + syslog.syslog("Done") + +# +# Now do the actual CGI handling +# +prefix = os.path.dirname(__file__) +sys.path.insert(0, prefix) +import config +cfg = config.Config(prefix+'/config.ini', 'webui') +syslog.syslog("starting pypi.fcgi") +fcg = thfcgi.FCGI(handle_request, + max_requests=-1, + backlog=50, + max_threads=1) +fcg.run() + + |