Mitigate deprecation of aiohttp's @middleware
decorator (#3259)
This is deprecated since aiohttp 4.0. If it doesn't exist just define a no-op decorator that does nothing (after the other aiohttp imports though!). By doing this, it's safe to ignore the DeprecationWarning without needing to require the latest aiohttp once they remove `@middleware`.
This commit is contained in:
parent
92c93a2780
commit
062e644aae
@ -105,6 +105,9 @@ filterwarnings = [
|
|||||||
# this is mitigated by a try/catch in https://github.com/psf/black/pull/2974/
|
# this is mitigated by a try/catch in https://github.com/psf/black/pull/2974/
|
||||||
# this ignore can be removed when support for aiohttp 3.7 is dropped.
|
# this ignore can be removed when support for aiohttp 3.7 is dropped.
|
||||||
'''ignore:Decorator `@unittest_run_loop` is no longer needed in aiohttp 3\.8\+:DeprecationWarning''',
|
'''ignore:Decorator `@unittest_run_loop` is no longer needed in aiohttp 3\.8\+:DeprecationWarning''',
|
||||||
|
# this is mitigated by a try/catch in https://github.com/psf/black/pull/3198/
|
||||||
|
# this ignore can be removed when support for aiohttp 3.x is dropped.
|
||||||
|
'''ignore:Middleware decorator is deprecated since 4\.0 and its behaviour is default, you can simply remove this decorator:DeprecationWarning''',
|
||||||
# this is mitigated by https://github.com/python/cpython/issues/79071 in python 3.8+
|
# this is mitigated by https://github.com/python/cpython/issues/79071 in python 3.8+
|
||||||
# this ignore can be removed when support for 3.7 is dropped.
|
# this ignore can be removed when support for 3.7 is dropped.
|
||||||
'''ignore:Bare functions are deprecated, use async ones:DeprecationWarning''',
|
'''ignore:Bare functions are deprecated, use async ones:DeprecationWarning''',
|
||||||
|
@ -1,15 +1,25 @@
|
|||||||
from typing import Awaitable, Callable, Iterable
|
from typing import TYPE_CHECKING, Any, Awaitable, Callable, Iterable, TypeVar
|
||||||
|
|
||||||
from aiohttp.web_middlewares import middleware
|
|
||||||
from aiohttp.web_request import Request
|
from aiohttp.web_request import Request
|
||||||
from aiohttp.web_response import StreamResponse
|
from aiohttp.web_response import StreamResponse
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
F = TypeVar("F", bound=Callable[..., Any])
|
||||||
|
middleware: Callable[[F], F]
|
||||||
|
else:
|
||||||
|
try:
|
||||||
|
from aiohttp.web_middlewares import middleware
|
||||||
|
except ImportError:
|
||||||
|
# @middleware is deprecated and its behaviour is the default since aiohttp 4.0
|
||||||
|
# so if it doesn't exist anymore, define a no-op for forward compatibility.
|
||||||
|
middleware = lambda x: x # noqa: E731
|
||||||
|
|
||||||
Handler = Callable[[Request], Awaitable[StreamResponse]]
|
Handler = Callable[[Request], Awaitable[StreamResponse]]
|
||||||
Middleware = Callable[[Request, Handler], Awaitable[StreamResponse]]
|
Middleware = Callable[[Request, Handler], Awaitable[StreamResponse]]
|
||||||
|
|
||||||
|
|
||||||
def cors(allow_headers: Iterable[str]) -> Middleware:
|
def cors(allow_headers: Iterable[str]) -> Middleware:
|
||||||
@middleware # type: ignore[misc]
|
@middleware
|
||||||
async def impl(request: Request, handler: Handler) -> StreamResponse:
|
async def impl(request: Request, handler: Handler) -> StreamResponse:
|
||||||
is_options = request.method == "OPTIONS"
|
is_options = request.method == "OPTIONS"
|
||||||
is_preflight = is_options and "Access-Control-Request-Method" in request.headers
|
is_preflight = is_options and "Access-Control-Request-Method" in request.headers
|
||||||
@ -32,4 +42,4 @@ async def impl(request: Request, handler: Handler) -> StreamResponse:
|
|||||||
|
|
||||||
return resp
|
return resp
|
||||||
|
|
||||||
return impl # type: ignore[no-any-return]
|
return impl
|
||||||
|
Loading…
Reference in New Issue
Block a user