summaryrefslogtreecommitdiff
path: root/pypi.fcgi
diff options
context:
space:
mode:
authormartin.von.loewis <devnull@localhost>2007-07-04 20:47:27 +0000
committermartin.von.loewis <devnull@localhost>2007-07-04 20:47:27 +0000
commit1af1a5afbe30815b3d5e1b1a751cb2ce0346f9cd (patch)
tree85c108e47135cc693ba9249920b28523e3a670a5 /pypi.fcgi
parent83f79828d208c4e682735994637c842c6a493431 (diff)
downloaddecorator-1af1a5afbe30815b3d5e1b1a751cb2ce0346f9cd.tar.gz
Add fcgi support
Diffstat (limited to 'pypi.fcgi')
-rwxr-xr-xpypi.fcgi59
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()
+
+