Skip to content

Commit c573019

Browse files
authored
ASGI websocket recv text or bytes (#2640)
1 parent 029f564 commit c573019

1 file changed

Lines changed: 12 additions & 4 deletions

File tree

sanic/server/websockets/connection.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,10 @@
99
Union,
1010
)
1111

12+
from sanic.exceptions import InvalidUsage
1213

13-
ASIMessage = MutableMapping[str, Any]
14+
15+
ASGIMessage = MutableMapping[str, Any]
1416

1517

1618
class WebSocketConnection:
@@ -25,8 +27,8 @@ class WebSocketConnection:
2527

2628
def __init__(
2729
self,
28-
send: Callable[[ASIMessage], Awaitable[None]],
29-
receive: Callable[[], Awaitable[ASIMessage]],
30+
send: Callable[[ASGIMessage], Awaitable[None]],
31+
receive: Callable[[], Awaitable[ASGIMessage]],
3032
subprotocols: Optional[List[str]] = None,
3133
) -> None:
3234
self._send = send
@@ -47,7 +49,13 @@ async def recv(self, *args, **kwargs) -> Optional[str]:
4749
message = await self._receive()
4850

4951
if message["type"] == "websocket.receive":
50-
return message["text"]
52+
try:
53+
return message["text"]
54+
except KeyError:
55+
try:
56+
return message["bytes"].decode()
57+
except KeyError:
58+
raise InvalidUsage("Bad ASGI message received")
5159
elif message["type"] == "websocket.disconnect":
5260
pass
5361

0 commit comments

Comments
 (0)