Skip to content

Commit

Permalink
Revert "Revert "Merge pull request #859 from wvh/register_error_handl…
Browse files Browse the repository at this point in the history
…er""

This reverts commit 2aa26ff.
  • Loading branch information
Kenneth Reitz committed Mar 21, 2014
1 parent 2aa26ff commit d4fec14
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 0 deletions.
11 changes: 11 additions & 0 deletions flask/blueprints.py
Expand Up @@ -399,3 +399,14 @@ def decorator(f):
self.name, code_or_exception, f))
return f
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 changes: 33 additions & 0 deletions flask/testsuite/blueprints.py
Expand Up @@ -296,6 +296,39 @@ def app_forbidden(e):
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')

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):
bp = flask.Blueprint('test', __name__)

Expand Down

0 comments on commit d4fec14

Please sign in to comment.