Skip to content

Commit da4d1ba

Browse files
committed
Fix ratelimiter with method checks
1 parent a46f1d5 commit da4d1ba

File tree

1 file changed

+8
-5
lines changed

1 file changed

+8
-5
lines changed

starlette_plus/middleware/ratelimiter.py

+8-5
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828

2929

3030
if TYPE_CHECKING:
31-
from starlette.routing import Route
31+
from starlette.routing import Mount, WebSocketRoute
3232
from starlette.types import ASGIApp, Receive, Scope, Send
3333

3434
from ..redis import Redis
@@ -70,12 +70,15 @@ async def __call__(self, scope: Scope, receive: Receive, send: Send) -> None:
7070
request: Request = Request(scope)
7171
forwarded: str | None = request.headers.get("X-Forwarded-For", None)
7272

73-
routes: list[Route] = scope["app"].routes
74-
route: Route | None = None
73+
routes: list[Route | Mount | WebSocketRoute] = scope["app"].routes
74+
route: Route | Mount | WebSocketRoute | None = None
7575

7676
for r in routes:
77-
methods: set[str] = r.methods or set()
78-
if r.path == request.url.path and request.method in methods:
77+
methods: set[str] | None = r.methods if isinstance(r, Route) else None
78+
if r.path != request.url.path:
79+
continue
80+
81+
if not methods or request.method in methods:
7982
route = r
8083
break
8184

0 commit comments

Comments
 (0)