mirror of https://github.com/mitsuhiko/flask.git
Markus Unterwaditzer
10 years ago
2 changed files with 182 additions and 30 deletions
@ -0,0 +1,113 @@
|
||||
# -*- coding: utf-8 -*- |
||||
from werkzeug.exceptions import Forbidden, InternalServerError |
||||
import flask |
||||
|
||||
|
||||
def test_error_handler_subclass(): |
||||
app = flask.Flask(__name__) |
||||
|
||||
class ParentException(Exception): |
||||
pass |
||||
|
||||
class ChildExceptionUnregistered(ParentException): |
||||
pass |
||||
|
||||
class ChildExceptionRegistered(ParentException): |
||||
pass |
||||
|
||||
@app.errorhandler(ParentException) |
||||
def parent_exception_handler(e): |
||||
assert isinstance(e, ParentException) |
||||
return 'parent' |
||||
|
||||
@app.errorhandler(ChildExceptionRegistered) |
||||
def child_exception_handler(e): |
||||
assert isinstance(e, ChildExceptionRegistered) |
||||
return 'child-registered' |
||||
|
||||
@app.route('/parent') |
||||
def parent_test(): |
||||
raise ParentException() |
||||
|
||||
@app.route('/child-unregistered') |
||||
def unregistered_test(): |
||||
raise ChildExceptionUnregistered() |
||||
|
||||
@app.route('/child-registered') |
||||
def registered_test(): |
||||
raise ChildExceptionRegistered() |
||||
|
||||
|
||||
c = app.test_client() |
||||
|
||||
assert c.get('/parent').data == b'parent' |
||||
assert c.get('/child-unregistered').data == b'parent' |
||||
assert c.get('/child-registered').data == b'child-registered' |
||||
|
||||
|
||||
def test_error_handler_http_subclass(): |
||||
app = flask.Flask(__name__) |
||||
|
||||
class ForbiddenSubclassRegistered(Forbidden): |
||||
pass |
||||
|
||||
class ForbiddenSubclassUnregistered(Forbidden): |
||||
pass |
||||
|
||||
@app.errorhandler(403) |
||||
def code_exception_handler(e): |
||||
assert isinstance(e, Forbidden) |
||||
return 'forbidden' |
||||
|
||||
@app.errorhandler(ForbiddenSubclassRegistered) |
||||
def subclass_exception_handler(e): |
||||
assert isinstance(e, ForbiddenSubclassRegistered) |
||||
return 'forbidden-registered' |
||||
|
||||
@app.route('/forbidden') |
||||
def forbidden_test(): |
||||
raise Forbidden() |
||||
|
||||
@app.route('/forbidden-registered') |
||||
def registered_test(): |
||||
raise ForbiddenSubclassRegistered() |
||||
|
||||
@app.route('/forbidden-unregistered') |
||||
def unregistered_test(): |
||||
raise ForbiddenSubclassUnregistered() |
||||
|
||||
|
||||
c = app.test_client() |
||||
|
||||
assert c.get('/forbidden').data == b'forbidden' |
||||
assert c.get('/forbidden-unregistered').data == b'forbidden' |
||||
assert c.get('/forbidden-registered').data == b'forbidden-registered' |
||||
|
||||
|
||||
def test_error_handler_blueprint(): |
||||
bp = flask.Blueprint('bp', __name__) |
||||
|
||||
@bp.errorhandler(500) |
||||
def bp_exception_handler(e): |
||||
return 'bp-error' |
||||
|
||||
@bp.route('/error') |
||||
def bp_test(): |
||||
raise InternalServerError() |
||||
|
||||
app = flask.Flask(__name__) |
||||
|
||||
@app.errorhandler(500) |
||||
def app_exception_handler(e): |
||||
return 'app-error' |
||||
|
||||
@app.route('/error') |
||||
def app_test(): |
||||
raise InternalServerError() |
||||
|
||||
app.register_blueprint(bp, url_prefix='/bp') |
||||
|
||||
c = app.test_client() |
||||
|
||||
assert c.get('/error').data == b'app-error' |
||||
assert c.get('/bp/error').data == b'bp-error' |
Loading…
Reference in new issue