forked from orbit-oss/flask
add errorhandler type check tests
This commit is contained in:
parent
81be290ec8
commit
3351a8677e
4 changed files with 40 additions and 4 deletions
|
|
@ -561,12 +561,14 @@ class Blueprint(Scaffold):
|
||||||
)
|
)
|
||||||
return f
|
return f
|
||||||
|
|
||||||
def app_errorhandler(self, code: t.Union[t.Type[Exception], int]) -> t.Callable:
|
def app_errorhandler(
|
||||||
|
self, code: t.Union[t.Type[Exception], int]
|
||||||
|
) -> t.Callable[[ft.ErrorHandlerDecorator], ft.ErrorHandlerDecorator]:
|
||||||
"""Like :meth:`Flask.errorhandler` but for a blueprint. This
|
"""Like :meth:`Flask.errorhandler` but for a blueprint. This
|
||||||
handler is used for all requests, even if outside of the blueprint.
|
handler is used for all requests, even if outside of the blueprint.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def decorator(f: ft.ErrorHandlerCallable) -> ft.ErrorHandlerCallable:
|
def decorator(f: ft.ErrorHandlerDecorator) -> ft.ErrorHandlerDecorator:
|
||||||
self.record_once(lambda s: s.app.errorhandler(code)(f))
|
self.record_once(lambda s: s.app.errorhandler(code)(f))
|
||||||
return f
|
return f
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -654,7 +654,7 @@ class Scaffold:
|
||||||
@setupmethod
|
@setupmethod
|
||||||
def errorhandler(
|
def errorhandler(
|
||||||
self, code_or_exception: t.Union[t.Type[Exception], int]
|
self, code_or_exception: t.Union[t.Type[Exception], int]
|
||||||
) -> t.Callable[[ft.ErrorHandlerCallable], ft.ErrorHandlerCallable]:
|
) -> t.Callable[[ft.ErrorHandlerDecorator], ft.ErrorHandlerDecorator]:
|
||||||
"""Register a function to handle errors by code or exception class.
|
"""Register a function to handle errors by code or exception class.
|
||||||
|
|
||||||
A decorator that is used to register a function given an
|
A decorator that is used to register a function given an
|
||||||
|
|
@ -684,7 +684,7 @@ class Scaffold:
|
||||||
an arbitrary exception
|
an arbitrary exception
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def decorator(f: ft.ErrorHandlerCallable) -> ft.ErrorHandlerCallable:
|
def decorator(f: ft.ErrorHandlerDecorator) -> ft.ErrorHandlerDecorator:
|
||||||
self.register_error_handler(code_or_exception, f)
|
self.register_error_handler(code_or_exception, f)
|
||||||
return f
|
return f
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -52,6 +52,7 @@ URLValuePreprocessorCallable = t.Callable[[t.Optional[str], t.Optional[dict]], N
|
||||||
# https://github.com/pallets/flask/issues/4295
|
# https://github.com/pallets/flask/issues/4295
|
||||||
# https://github.com/pallets/flask/issues/4297
|
# https://github.com/pallets/flask/issues/4297
|
||||||
ErrorHandlerCallable = t.Callable[[t.Any], ResponseReturnValue]
|
ErrorHandlerCallable = t.Callable[[t.Any], ResponseReturnValue]
|
||||||
|
ErrorHandlerDecorator = t.TypeVar("ErrorHandlerDecorator", bound=ErrorHandlerCallable)
|
||||||
|
|
||||||
ViewCallable = t.Callable[..., ResponseReturnValue]
|
ViewCallable = t.Callable[..., ResponseReturnValue]
|
||||||
RouteDecorator = t.TypeVar("RouteDecorator", bound=ViewCallable)
|
RouteDecorator = t.TypeVar("RouteDecorator", bound=ViewCallable)
|
||||||
|
|
|
||||||
33
tests/typing/typing_error_handler.py
Normal file
33
tests/typing/typing_error_handler.py
Normal file
|
|
@ -0,0 +1,33 @@
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from http import HTTPStatus
|
||||||
|
|
||||||
|
from werkzeug.exceptions import BadRequest
|
||||||
|
from werkzeug.exceptions import NotFound
|
||||||
|
|
||||||
|
from flask import Flask
|
||||||
|
|
||||||
|
app = Flask(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
@app.errorhandler(400)
|
||||||
|
@app.errorhandler(HTTPStatus.BAD_REQUEST)
|
||||||
|
@app.errorhandler(BadRequest)
|
||||||
|
def handle_400(e: BadRequest) -> str:
|
||||||
|
return ""
|
||||||
|
|
||||||
|
|
||||||
|
@app.errorhandler(ValueError)
|
||||||
|
def handle_custom(e: ValueError) -> str:
|
||||||
|
return ""
|
||||||
|
|
||||||
|
|
||||||
|
@app.errorhandler(ValueError)
|
||||||
|
def handle_accept_base(e: Exception) -> str:
|
||||||
|
return ""
|
||||||
|
|
||||||
|
|
||||||
|
@app.errorhandler(BadRequest)
|
||||||
|
@app.errorhandler(404)
|
||||||
|
def handle_multiple(e: BadRequest | NotFound) -> str:
|
||||||
|
return ""
|
||||||
Loading…
Add table
Add a link
Reference in a new issue