--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/wsgi.py Sun Feb 08 03:17:07 2009 +0200
@@ -0,0 +1,68 @@
+
+"""
+ WSGI application implementation
+"""
+
+# for error reporting
+import sys, traceback
+
+# for Request/Response
+import http
+
+class Application (object) :
+ """
+ Our WSGI application, implements the wsgi __call__ interface
+ """
+
+ def __init__ (self, handler) :
+ """
+ Initialize to use the given handler for requests
+ """
+
+ self.handler = handler
+
+ def handle_request (self, env, start_response) :
+ """
+ The actual request handling code
+ """
+
+ # build Request object
+ request = http.Request(env)
+
+ try :
+ # request -> response using our handler
+ response = self.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 __call__ (self, env, start_response) :
+ """
+ Wraps handle_request to trap errors
+ """
+
+ try :
+ # passthrough request_handler
+ for chunk in self.handle_request(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()
+