Browse Source

Revert "Revert "Merge pull request #859 from wvh/register_error_handler""

This reverts commit 2aa26fff04.
pull/952/merge
Kenneth Reitz 11 years ago
parent
commit
d4fec14544
  1. 11
      flask/blueprints.py
  2. 33
      flask/testsuite/blueprints.py

11
flask/blueprints.py

@ -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))

33
flask/testsuite/blueprints.py

@ -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…
Cancel
Save