--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/wsgi.py Fri Feb 06 21:31:02 2009 +0200
@@ -0,0 +1,59 @@
+
+"""
+ WSGI application implementation
+"""
+
+# for error reporting
+import sys, traceback
+
+# for Request/Response
+import http
+
+# for the request -> response bit :)
+import handler
+
+def request_handler (env, start_response) :
+ """
+ The actual request handling code
+ """
+
+ # build Request object
+ request = http.Request(env)
+
+ try :
+ # request -> response
+ response = handler.handle_request(request)
+
+ except http.ResponseError, err :
+ # just use the generated response
+ response = err.get_response()
+
+ # send response
+ assert response, "No response"
+
+ # send response status/headers
+ start_response(response.get_status(), response.get_headers())
+
+ # send respones data
+ yield response.get_data()
+
+def app (env, start_response) :
+ """
+ Wraps request_handler to trap errors
+ """
+
+ try :
+ # passthrough request_handler
+ for chunk in request_handler(env, start_response) :
+ yield chunk
+
+ except :
+ # execption info
+ info = sys.exc_info()
+
+ # try and send 500 ISE to browser, if no headers yet...
+ start_response("500 Internal Server Error", [('Content-type', "text/plain; charset=utf8")], info)
+
+ # send traceback
+ yield traceback.format_exc()
+