Fixed last commit and added test
This commit is contained in:
parent
f1537a9d7a
commit
61d3bbf1d2
2 changed files with 31 additions and 6 deletions
12
flask/app.py
12
flask/app.py
|
|
@ -1283,6 +1283,10 @@ class Flask(_PackageBoundObject):
|
|||
.. versionadded:: 0.3
|
||||
"""
|
||||
handlers = self.error_handler_spec.get(request.blueprint)
|
||||
# Proxy exceptions don't have error codes. We want to always return
|
||||
# those unchanged as errors
|
||||
if e.code is None:
|
||||
return e
|
||||
if handlers and e.code in handlers:
|
||||
handler = handlers[e.code]
|
||||
else:
|
||||
|
|
@ -1327,12 +1331,8 @@ class Flask(_PackageBoundObject):
|
|||
# ensure not to trash sys.exc_info() at that point in case someone
|
||||
# wants the traceback preserved in handle_http_exception. Of course
|
||||
# we cannot prevent users from trashing it themselves in a custom
|
||||
# trap_http_exception method so that's their fault then. Proxy
|
||||
# exceptions generally must always be trapped (filtered out by
|
||||
# e.code == None)
|
||||
if isinstance(e, HTTPException) \
|
||||
and e.code is not None \
|
||||
and not self.trap_http_exception(e):
|
||||
# trap_http_exception method so that's their fault then.
|
||||
if isinstance(e, HTTPException) and not self.trap_http_exception(e):
|
||||
return self.handle_http_exception(e)
|
||||
|
||||
blueprint_handlers = ()
|
||||
|
|
|
|||
|
|
@ -86,7 +86,32 @@ class MemoryTestCase(FlaskTestCase):
|
|||
safe_join('/foo', '..')
|
||||
|
||||
|
||||
class ExceptionTestCase(FlaskTestCase):
|
||||
|
||||
def test_aborting(self):
|
||||
class Foo(Exception):
|
||||
whatever = 42
|
||||
app = flask.Flask(__name__)
|
||||
app.testing = True
|
||||
@app.errorhandler(Foo)
|
||||
def handle_foo(e):
|
||||
return str(e.whatever)
|
||||
@app.route('/')
|
||||
def index():
|
||||
raise flask.abort(flask.redirect(flask.url_for('test')))
|
||||
@app.route('/test')
|
||||
def test():
|
||||
raise Foo()
|
||||
|
||||
with app.test_client() as c:
|
||||
rv = c.get('/')
|
||||
self.assertEqual(rv.headers['Location'], 'http://localhost/test')
|
||||
rv = c.get('/test')
|
||||
self.assertEqual(rv.data, '42')
|
||||
|
||||
|
||||
def suite():
|
||||
suite = unittest.TestSuite()
|
||||
suite.addTest(unittest.makeSuite(MemoryTestCase))
|
||||
suite.addTest(unittest.makeSuite(ExceptionTestCase))
|
||||
return suite
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue