Skip to content

Commit cc6148c

Browse files
authored
fix: Fix #4035 - incorrect deprecation warning issued when subclassing middlewares (#4036)
1 parent 05005ca commit cc6148c

File tree

2 files changed

+12
-9
lines changed

2 files changed

+12
-9
lines changed

docs/examples/middleware/base.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,16 @@
44
from litestar import Litestar, WebSocket, get, websocket
55
from litestar.datastructures import MutableScopeHeaders
66
from litestar.enums import ScopeType
7-
from litestar.middleware import AbstractMiddleware
8-
from litestar.types import Message, Receive, Scope, Send
7+
from litestar.middleware import ASGIMiddleware
8+
from litestar.types import ASGIApp, Message, Receive, Scope, Send
99

1010

11-
class MyMiddleware(AbstractMiddleware):
12-
scopes = {ScopeType.HTTP}
13-
exclude = ["first_path", "second_path"]
11+
class MyMiddleware(ASGIMiddleware):
12+
scopes = (ScopeType.HTTP,)
13+
exclude_path_pattern = ("first_path", "second_path")
1414
exclude_opt_key = "exclude_from_my_middleware"
1515

16-
async def __call__(self, scope: Scope, receive: Receive, send: Send) -> None:
16+
async def handle(self, scope: Scope, receive: Receive, send: Send, next_app: ASGIApp) -> None:
1717
start_time = time.monotonic()
1818

1919
async def send_wrapper(message: "Message") -> None:
@@ -23,7 +23,7 @@ async def send_wrapper(message: "Message") -> None:
2323
headers["X-Process-Time"] = str(process_time)
2424
await send(message)
2525

26-
await self.app(scope, receive, send_wrapper)
26+
await next_app(scope, receive, send_wrapper)
2727

2828

2929
@websocket("/my-websocket")
@@ -68,5 +68,5 @@ def not_excluded_handler() -> Dict[str, str]:
6868
third_handler,
6969
not_excluded_handler,
7070
],
71-
middleware=[MyMiddleware],
71+
middleware=[MyMiddleware()],
7272
)

litestar/middleware/base.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,10 @@ def __init__(
120120

121121
@classmethod
122122
def __init_subclass__(cls, **kwargs: Any) -> None:
123-
if not cls.__module__.startswith("litestar"):
123+
if not any(c.__module__.startswith("litestar") and c is not AbstractMiddleware for c in cls.mro()):
124+
# we don't want to warn about usage of 'AbstractMiddleware' if users aren't
125+
# directly subclassing it, i.e. they're subclassing another Litestar
126+
# middleware which itself subclasses 'AbstractMiddleware'
124127
warn_deprecation(
125128
version="2.15",
126129
deprecated_name="AbstractMiddleware",

0 commit comments

Comments
 (0)