Merge pull request #859 from wvh/register_error_handler
Add a non-decorator version of the error handler register function
This commit is contained in:
commit
6347e75dee
2 changed files with 44 additions and 0 deletions
|
|
@ -399,3 +399,14 @@ class Blueprint(_PackageBoundObject):
|
||||||
self.name, code_or_exception, f))
|
self.name, code_or_exception, f))
|
||||||
return f
|
return f
|
||||||
return decorator
|
return decorator
|
||||||
|
|
||||||
|
def register_error_handler(self, code_or_exception, f):
|
||||||
|
"""Non-decorator version of the :meth:`errorhandler` error attach
|
||||||
|
function, akin to the :meth:`~flask.Flask.register_error_handler`
|
||||||
|
application-wide function of the :class:`~flask.Flask` object but
|
||||||
|
for error handlers limited to this blueprint.
|
||||||
|
|
||||||
|
.. versionadded:: 0.11
|
||||||
|
"""
|
||||||
|
self.record_once(lambda s: s.app._register_error_handler(
|
||||||
|
self.name, code_or_exception, f))
|
||||||
|
|
|
||||||
|
|
@ -296,6 +296,39 @@ class BlueprintTestCase(FlaskTestCase):
|
||||||
self.assert_equal(c.get('/backend-no').data, b'backend says no')
|
self.assert_equal(c.get('/backend-no').data, b'backend says no')
|
||||||
self.assert_equal(c.get('/what-is-a-sideend').data, b'application itself says no')
|
self.assert_equal(c.get('/what-is-a-sideend').data, b'application itself says no')
|
||||||
|
|
||||||
|
def test_blueprint_specific_user_error_handling(self):
|
||||||
|
class MyDecoratorException(Exception):
|
||||||
|
pass
|
||||||
|
class MyFunctionException(Exception):
|
||||||
|
pass
|
||||||
|
|
||||||
|
blue = flask.Blueprint('blue', __name__)
|
||||||
|
|
||||||
|
@blue.errorhandler(MyDecoratorException)
|
||||||
|
def my_decorator_exception_handler(e):
|
||||||
|
self.assert_true(isinstance(e, MyDecoratorException))
|
||||||
|
return 'boom'
|
||||||
|
|
||||||
|
def my_function_exception_handler(e):
|
||||||
|
self.assert_true(isinstance(e, MyFunctionException))
|
||||||
|
return 'bam'
|
||||||
|
blue.register_error_handler(MyFunctionException, my_function_exception_handler)
|
||||||
|
|
||||||
|
@blue.route('/decorator')
|
||||||
|
def blue_deco_test():
|
||||||
|
raise MyDecoratorException()
|
||||||
|
@blue.route('/function')
|
||||||
|
def blue_func_test():
|
||||||
|
raise MyFunctionException()
|
||||||
|
|
||||||
|
app = flask.Flask(__name__)
|
||||||
|
app.register_blueprint(blue)
|
||||||
|
|
||||||
|
c = app.test_client()
|
||||||
|
|
||||||
|
self.assert_equal(c.get('/decorator').data, b'boom')
|
||||||
|
self.assert_equal(c.get('/function').data, b'bam')
|
||||||
|
|
||||||
def test_blueprint_url_definitions(self):
|
def test_blueprint_url_definitions(self):
|
||||||
bp = flask.Blueprint('test', __name__)
|
bp = flask.Blueprint('test', __name__)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue