diff options
-rw-r--r-- | paste/cgitb_catcher.py | 42 | ||||
-rw-r--r-- | paste/error_middleware.py | 7 | ||||
-rw-r--r-- | paste/gzipper.py | 6 | ||||
-rw-r--r-- | paste/httpexceptions.py | 10 | ||||
-rw-r--r-- | paste/login.py | 4 | ||||
-rw-r--r-- | paste/recursive.py | 4 | ||||
-rw-r--r-- | paste/session.py | 4 | ||||
-rw-r--r-- | paste/wdg_validate.py | 4 | ||||
-rw-r--r-- | paste/wsgilib.py | 4 |
9 files changed, 28 insertions, 57 deletions
diff --git a/paste/cgitb_catcher.py b/paste/cgitb_catcher.py index b8f4915..732f7e1 100644 --- a/paste/cgitb_catcher.py +++ b/paste/cgitb_catcher.py @@ -19,8 +19,8 @@ def middleware(application, **kw): def start_application(environ, start_response): started = [] - def detect_start_response(status, headers): - started.append(start_response(status, headers)) + def detect_start_response(status, headers, exc_info=None): + started.append(start_response(status, headers, exc_info)) return started[0] try: @@ -55,41 +55,3 @@ def middleware(application, **kw): yield dummy_file.getvalue() return start_application - -def simple_middleware(application, **kw): - - def start_application(environ, start_response): - started = [] - - def detect_start_response(status, headers): - started.append(start_response(status, headers)) - return started[0] - - try: - app_iter = application(environ, start_response) - return catching_iter(app_iter) - except: - if not started: - write = start_response('500 Internal Server Error', - [('content-type', 'text/html')]) - else: - write = started[0] - - out = String() - traceback.print_exc(file=out) - return ['<html><body><pre>%s</pre></body></html>' - % out.getvalue()] - - def catching_iter(iter): - if not iter: - raise StopIteration - try: - for v in iter: - yield iter - except: - exc = sys.exc_info() - dummy_file = StringIO() - traceback.print_exc(file=dummy_file) - yield dummy_file.getvalue() - - return start_application diff --git a/paste/error_middleware.py b/paste/error_middleware.py index 8458f75..d5c2b02 100644 --- a/paste/error_middleware.py +++ b/paste/error_middleware.py @@ -60,9 +60,9 @@ class ErrorMiddleware(object): return self.application(environ, start_response) environ['paste.throw_errors'] = True - def detect_start_response(status, headers): + def detect_start_response(status, headers, exc_info=None): started.append(True) - return start_response(status, headers) + return start_response(status, headers, exc_info) try: __traceback_supplement__ = Supplement, self, environ @@ -175,6 +175,9 @@ def handle_exception(exc_info, conf, error_stream, html=True): if not rep_err: extra_data += rep_err reported = True + else: + error_stream.write('Error - %s: %s\n' % ( + exc_data.exception_type, exc_data.exception_value)) if html: if conf.get('debug', False): return_error = error_template( diff --git a/paste/gzipper.py b/paste/gzipper.py index 45fae50..3bf42bb 100644 --- a/paste/gzipper.py +++ b/paste/gzipper.py @@ -39,14 +39,14 @@ class GzipResponse(object): self.compress_level = compress_level self.gzip_fileobj = None - def gzip_start_response(self, status, headers): + def gzip_start_response(self, status, headers, exc_info=None): # This isn't part of the spec yet: if wsgilib.has_header(headers, 'content-encoding'): # we won't double-encode - return self.start_response(status, headers) + return self.start_response(status, headers, exc_info) headers.append(('content-encoding', 'gzip')) - raw_writer = self.start_response(status, headers) + raw_writer = self.start_response(status, headers, exc_info) dummy_fileobj = GzipOutput() dummy_fileobj.write = raw_writer self.gzip_fileobj = gzip.GzipFile('', 'wb', self.compress_level, diff --git a/paste/httpexceptions.py b/paste/httpexceptions.py index dbcf742..18dd250 100644 --- a/paste/httpexceptions.py +++ b/paste/httpexceptions.py @@ -213,13 +213,14 @@ def middleware(application): def start_application(environ, start_response): app_started = [] - def checked_start_response(status, headers): + def checked_start_response(status, headers, exc_info=None): app_started.append(None) - return start_response(status, headers) + return start_response(status, headers, exc_info) try: return application(environ, start_response) except HTTPException, e: + print "****Got:", e if app_started: # They've already started the response, so we can't # do the right thing anymore. @@ -227,8 +228,9 @@ def middleware(application): headers = {'content-type': 'text/html'} if e.headers: headers.update(e.headers) - write = start_response('%s %s' % (e.code, e.title), - headers.items()) + print "Sending headers:", headers.items() + start_response('%s %s' % (e.code, e.title), + headers.items()) return [e.html(environ)] return start_application diff --git a/paste/login.py b/paste/login.py index 7e6fcac..afe282e 100644 --- a/paste/login.py +++ b/paste/login.py @@ -113,7 +113,7 @@ def middleware( if username: environ['REMOTE_USER'] = username - def login_start_response(status, headers): + def login_start_response(status, headers, exc_info=None): if environ.get('paste.login._dologin'): cookie = SimpleCookie(cookie_name, signer.make_signature(username), @@ -133,7 +133,7 @@ def middleware( "use a non-relative page for the login_page") environ['paste.login._doredirect'] = login_page return garbage_writer - return start_response(status, headers) + return start_response(status, headers, exc_info) app_iter = application(environ, login_start_response) diff --git a/paste/recursive.py b/paste/recursive.py index 5974991..5c370b8 100644 --- a/paste/recursive.py +++ b/paste/recursive.py @@ -74,7 +74,9 @@ class Includer(Recursive): def activate(self, environ): environ['wsgi.errors'].write('Including %r\n' % (environ['SCRIPT_NAME'] + environ['PATH_INFO'])) response = IncludedResponse - def start_response(status, headers): + def start_response(status, headers, exc_info=None): + if exc_info: + raise exc_info[0], exc_info[1], exc_info[2] response.status = status response.headers = headers return response.write diff --git a/paste/session.py b/paste/session.py index 72ba8d3..fbd561a 100644 --- a/paste/session.py +++ b/paste/session.py @@ -37,11 +37,11 @@ class SessionMiddleware(object): session_factory = SessionFactory(environ, **self.factory_kw) environ['paste.session.factory'] = session_factory - def session_start_response(status, headers): + def session_start_response(status, headers, exc_info=None): if not session_factory.created: return start_response(status, headers) headers.append(session_factory.set_cookie_header()) - return start_response(status, headers) + return start_response(status, headers, exc_info) app_iter = self.application(environ, session_start_response) if session_factory.used: diff --git a/paste/wdg_validate.py b/paste/wdg_validate.py index b7bdeff..a7903d1 100644 --- a/paste/wdg_validate.py +++ b/paste/wdg_validate.py @@ -27,9 +27,9 @@ class WDGValidateMiddleware(object): def __call__(self, environ, start_response): output = StringIO() response = [] - def writer_start_response(status, headers): + def writer_start_response(status, headers, exc_info=None): response.extend((status, headers)) - start_response(status, headers) + start_response(status, headers, exc_info) return output.write app_iter = self.app(environ, writer_start_response) try: diff --git a/paste/wsgilib.py b/paste/wsgilib.py index 4e37095..216ed30 100644 --- a/paste/wsgilib.py +++ b/paste/wsgilib.py @@ -69,7 +69,9 @@ def raw_interactive(application, path_info='', **environ): basic_environ['wsgi.input'] = StringIO(basic_environ['wsgi.input']) output = StringIO() data = {} - def start_response(status, headers): + def start_response(status, headers, exc_info=None): + if exc_info: + raise exc_info[0], exc_info[1], exc_info[2] data['status'] = status data['headers'] = headers return output.write |