mirror of https://github.com/tiangolo/fastapi.git
🐛 Fix dependency overrides in WebSockets (#1122)
* add tests to test_ws_router to test dependencies and dependency overrides. * supply dependency_overrides_provider to APIWebSocketRoute upon creation
This commit is contained in:
parent
210af1fd3d
commit
02441ff031
|
|
@ -498,7 +498,12 @@ class APIRouter(routing.Router):
|
||||||
def add_api_websocket_route(
|
def add_api_websocket_route(
|
||||||
self, path: str, endpoint: Callable, name: str = None
|
self, path: str, endpoint: Callable, name: str = None
|
||||||
) -> None:
|
) -> None:
|
||||||
route = APIWebSocketRoute(path, endpoint=endpoint, name=name)
|
route = APIWebSocketRoute(
|
||||||
|
path,
|
||||||
|
endpoint=endpoint,
|
||||||
|
name=name,
|
||||||
|
dependency_overrides_provider=self.dependency_overrides_provider,
|
||||||
|
)
|
||||||
self.routes.append(route)
|
self.routes.append(route)
|
||||||
|
|
||||||
def websocket(self, path: str, name: str = None) -> Callable:
|
def websocket(self, path: str, name: str = None) -> Callable:
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
from fastapi import APIRouter, FastAPI, WebSocket
|
from fastapi import APIRouter, Depends, FastAPI, WebSocket
|
||||||
from fastapi.testclient import TestClient
|
from fastapi.testclient import TestClient
|
||||||
|
|
||||||
router = APIRouter()
|
router = APIRouter()
|
||||||
|
|
@ -34,6 +34,19 @@ async def routerindex(websocket: WebSocket):
|
||||||
await websocket.close()
|
await websocket.close()
|
||||||
|
|
||||||
|
|
||||||
|
async def ws_dependency():
|
||||||
|
return "Socket Dependency"
|
||||||
|
|
||||||
|
|
||||||
|
@router.websocket("/router-ws-depends/")
|
||||||
|
async def router_ws_decorator_depends(
|
||||||
|
websocket: WebSocket, data=Depends(ws_dependency)
|
||||||
|
):
|
||||||
|
await websocket.accept()
|
||||||
|
await websocket.send_text(data)
|
||||||
|
await websocket.close()
|
||||||
|
|
||||||
|
|
||||||
app.include_router(router)
|
app.include_router(router)
|
||||||
app.include_router(prefix_router, prefix="/prefix")
|
app.include_router(prefix_router, prefix="/prefix")
|
||||||
|
|
||||||
|
|
@ -64,3 +77,16 @@ def test_router2():
|
||||||
with client.websocket_connect("/router2") as websocket:
|
with client.websocket_connect("/router2") as websocket:
|
||||||
data = websocket.receive_text()
|
data = websocket.receive_text()
|
||||||
assert data == "Hello, router!"
|
assert data == "Hello, router!"
|
||||||
|
|
||||||
|
|
||||||
|
def test_router_ws_depends():
|
||||||
|
client = TestClient(app)
|
||||||
|
with client.websocket_connect("/router-ws-depends/") as websocket:
|
||||||
|
assert websocket.receive_text() == "Socket Dependency"
|
||||||
|
|
||||||
|
|
||||||
|
def test_router_ws_depends_with_override():
|
||||||
|
client = TestClient(app)
|
||||||
|
app.dependency_overrides[ws_dependency] = lambda: "Override"
|
||||||
|
with client.websocket_connect("/router-ws-depends/") as websocket:
|
||||||
|
assert websocket.receive_text() == "Override"
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue