]> git.ipfire.org Git - thirdparty/fastapi/fastapi.git/commitdiff
🐛 Fix support for prefix on APIRouter WebSockets (#2640)
authorMarcelo Trylesinski <marcelotryle@gmail.com>
Sun, 17 Apr 2022 17:21:53 +0000 (19:21 +0200)
committerGitHub <noreply@github.com>
Sun, 17 Apr 2022 17:21:53 +0000 (19:21 +0200)
Co-authored-by: Sebastián Ramírez <tiangolo@gmail.com>
fastapi/routing.py
tests/test_ws_router.py

index 0f416ac42e1df52e716c4a7be862bd0271d2b23f..7a15f3965fc3fc9b367d9e56138e6f406a4ec87b 100644 (file)
@@ -649,7 +649,7 @@ class APIRouter(routing.Router):
         self, path: str, endpoint: Callable[..., Any], name: Optional[str] = None
     ) -> None:
         route = APIWebSocketRoute(
-            path,
+            self.prefix + path,
             endpoint=endpoint,
             name=name,
             dependency_overrides_provider=self.dependency_overrides_provider,
index bd7c3c53d6e3b5de8b7078cbc595fc0a1465e5de..fbca104a231a11a386655be3ad3067271d8570ba 100644 (file)
@@ -3,6 +3,7 @@ from fastapi.testclient import TestClient
 
 router = APIRouter()
 prefix_router = APIRouter()
+native_prefix_route = APIRouter(prefix="/native")
 app = FastAPI()
 
 
@@ -47,8 +48,16 @@ async def router_ws_decorator_depends(
     await websocket.close()
 
 
+@native_prefix_route.websocket("/")
+async def router_native_prefix_ws(websocket: WebSocket):
+    await websocket.accept()
+    await websocket.send_text("Hello, router with native prefix!")
+    await websocket.close()
+
+
 app.include_router(router)
 app.include_router(prefix_router, prefix="/prefix")
+app.include_router(native_prefix_route)
 
 
 def test_app():
@@ -72,6 +81,13 @@ def test_prefix_router():
         assert data == "Hello, router with prefix!"
 
 
+def test_native_prefix_router():
+    client = TestClient(app)
+    with client.websocket_connect("/native/") as websocket:
+        data = websocket.receive_text()
+        assert data == "Hello, router with native prefix!"
+
+
 def test_router2():
     client = TestClient(app)
     with client.websocket_connect("/router2") as websocket: