summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--paste/cgitb_catcher.py42
-rw-r--r--paste/error_middleware.py7
-rw-r--r--paste/gzipper.py6
-rw-r--r--paste/httpexceptions.py10
-rw-r--r--paste/login.py4
-rw-r--r--paste/recursive.py4
-rw-r--r--paste/session.py4
-rw-r--r--paste/wdg_validate.py4
-rw-r--r--paste/wsgilib.py4
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