diff options
author | ianb <devnull@localhost> | 2005-11-05 04:50:59 +0000 |
---|---|---|
committer | ianb <devnull@localhost> | 2005-11-05 04:50:59 +0000 |
commit | f4bd738b1cdba4a11e64773a3d4d016cb8e08fa8 (patch) | |
tree | 4ed46924b12aa5879b0c6103f7950e33678c917f /paste/exceptions/errormiddleware.py | |
parent | 58c5f2dd2c8a156327c5c0d7ac4df13fb7bca41b (diff) | |
download | paste-f4bd738b1cdba4a11e64773a3d4d016cb8e08fa8.tar.gz |
Add a hook to the error middleware to ignore (re-raise) exceptions in env[paste.expected_exceptions]; also made httpexceptions put this in. This way if httpexceptions wraps error middleware, it'll still work
Diffstat (limited to 'paste/exceptions/errormiddleware.py')
-rw-r--r-- | paste/exceptions/errormiddleware.py | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/paste/exceptions/errormiddleware.py b/paste/exceptions/errormiddleware.py index 781efe5..cc4bd57 100644 --- a/paste/exceptions/errormiddleware.py +++ b/paste/exceptions/errormiddleware.py @@ -57,6 +57,13 @@ class ErrorMiddleware(object): ``error_message``: When debug mode is off, the error message to show to users. + + This also looks for a special key ``'paste.expected_exceptions``, + which should be a list of exception classes. When an exception is + raised, if it is found in this list then it will be re-raised + instead of being caught. This should generally be set by + middleware that may (but probably shouldn't be) installed above + this middleware, and wants to get certain exceptions. """ def __init__(self, application, global_conf=None, @@ -118,6 +125,9 @@ class ErrorMiddleware(object): return self.catching_iter(app_iter, environ) except: exc_info = sys.exc_info() + for expected in environ.get('paste.expected_exceptions', []): + if issubclass(exc_info[0], expected): + raise if not started: start_response('500 Internal Server Error', [('content-type', 'text/html')], |