Skip to content

Commit bed8cfb

Browse files
Fixes WebSocket Implementation for Router of Instance of APIWebSocketRoute
1 parent e9e7e2c commit bed8cfb

File tree

1 file changed

+10
-6
lines changed

1 file changed

+10
-6
lines changed

fastapi_utils/cbv.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
import pydantic
1515
from fastapi import APIRouter, Depends
16-
from fastapi.routing import APIRoute
16+
from fastapi.routing import APIRoute, APIWebSocketRoute
1717
from starlette.routing import Route, WebSocketRoute
1818

1919
PYDANTIC_VERSION = pydantic.VERSION
@@ -108,12 +108,16 @@ def _register_endpoints(router: APIRouter, cls: Type[Any], *urls: str) -> None:
108108
_allocate_routes_by_method_name(router, url, function_members)
109109
router_roles = []
110110
for route in router.routes:
111-
if not isinstance(route, APIRoute):
112-
raise ValueError("The provided routes should be of type APIRoute")
111+
if not isinstance(route, APIRoute) and not isinstance(route, APIWebSocketRoute):
112+
raise ValueError("The provided routes should be of type APIRoute or APIWebSocketRoute")
113113

114-
route_methods: Any = route.methods
115-
cast(Tuple[Any], route_methods)
116-
router_roles.append((route.path, tuple(route_methods)))
114+
if isinstance(route, APIRoute):
115+
route_methods: Any = route.methods
116+
cast(Tuple[Any], route_methods)
117+
router_roles.append((route.path, tuple(route_methods)))
118+
119+
if isinstance(route, APIWebSocketRoute):
120+
router_roles.append((route.path, tuple(["WS"])))
117121

118122
if len(set(router_roles)) != len(router_roles):
119123
raise Exception("An identical route role has been implemented more then once")

0 commit comments

Comments
 (0)