def __call__(self, request): """ Handle the given request. """ # Make sure this plays nice with Web. request.auto_finish = False response = [] status = '200 OK' headers = {} def start_response(status, head): status = status headers.update(head) return response.append # Build an environment for the WSGI application. environ = { 'REQUEST_METHOD' : request.method, 'SCRIPT_NAME' : '', 'PATH_INFO' : request.path, 'QUERY_STRING' : request.query, 'SERVER_NAME' : request.headers.get('Host','127.0.0.1'), 'SERVER_PORT' : request.connection.server.local_addr[1], 'SERVER_PROTOCOL' : request.version, 'wsgi.version' : (1,0), 'wsgi.url_scheme' : request.protocol, 'wsgi.input' : cStringIO.StringIO(request.body), 'wsgi.errors' : sys.stderr, 'wsgi.multithread' : False, 'wsgi.multiprocess' : False, 'wsgi.run_once' : False } if 'Content-Type' in request.headers: environ['CONTENT_TYPE'] = request.headers['Content-Type'] if 'Content-Length' in request.headers: environ['CONTENT_LENGTH'] = request.headers['Content-Length'] for k,v in request.headers.iteritems(): environ['HTTP_%s' % k.replace('-','_').upper()] = v # Run the WSGI Application. try: result = self.app(environ, start_response) except Exception, e: log.exception('Exception running WSGI application for: %s %s', request.method, request.path) if not self.debug: body, status, headers = error(500, request=request, debug=False) else: resp = u''.join([ u"<h2>Traceback</h2>\n", u"<pre>%s</pre>\n" % traceback.format_exc(), u"<h2>HTTP Request</h2>\n", request.__html__(), ]) body, status, headers = error(resp, 500, request=request, debug=True) status = '500 Internal Server Error' response = [body] result = []
def __call__(self, request): """ Handle the given request. """ # Make sure this plays nice with Web. request.auto_finish = False def start_response(status, head): request.send_status(status) if isinstance(head, list): head = dict(head) request.send_headers(head) return request.write # Build an environment for the WSGI application. environ = { 'REQUEST_METHOD' : request.method, 'SCRIPT_NAME' : '', 'PATH_INFO' : request.path, 'QUERY_STRING' : request.query, 'SERVER_NAME' : request.headers.get('Host','127.0.0.1'), 'SERVER_PROTOCOL' : request.version, 'REMOTE_ADDR' : request.remote_ip, 'GATEWAY_INTERFACE' : 'WSGI/1.0', 'wsgi.version' : (1,0), 'wsgi.url_scheme' : request.protocol, 'wsgi.input' : cStringIO.StringIO(request.body), 'wsgi.errors' : sys.stderr, 'wsgi.multithread' : False, 'wsgi.multiprocess' : False, 'wsgi.run_once' : False } if isinstance(request.connection.server.local_addr, tuple): environ['SERVER_PORT'] = request.connection.server.local_addr[1] if hasattr(request, 'arguments'): environ['wsgiorg.routing_args'] = (request.arguments, {}) elif hasattr(request, 'match'): environ['wsgiorg.routing_args'] = (request.match.groups(), {}) if 'Content-Type' in request.headers: environ['CONTENT_TYPE'] = request.headers['Content-Type'] if 'Content-Length' in request.headers: environ['CONTENT_LENGTH'] = request.headers['Content-Length'] for k,v in request.headers.iteritems(): environ['HTTP_%s' % k.replace('-','_').upper()] = v # Run the WSGI Application. try: result = self.app(environ, start_response) except Exception, e: log.exception('Exception running WSGI application for: %s %s', request.method, request.path) if not self.debug: body, status, headers = error(500, request=request, debug=False) else: resp = u''.join([ u"<h2>Traceback</h2>\n", u"<pre>%s</pre>\n" % traceback.format_exc(), u"<h2>HTTP Request</h2>\n", request.__html__(), ]) body, status, headers = error(resp, 500, request=request, debug=True) request.send_status(500) if not 'Content-Length' in headers: headers['Content-Length'] = len(body) request.send_headers(headers) request.write(body) request.finish() return