MCPcopy Create free account
hub / github.com/pallets/quart / handle_websocket

Method handle_websocket

src/quart/asgi.py:240–307  ·  view source on GitHub ↗
(
        self, websocket: Websocket, send: ASGISendCallable
    )

Source from the content-addressed store, hash-verified

238 )
239
240 async def handle_websocket(
241 self, websocket: Websocket, send: ASGISendCallable
242 ) -> None:
243 try:
244 response = await self.app.handle_websocket(websocket)
245 except Exception as error:
246 response = await _handle_exception(self.app, error)
247
248 if response is not None and not self._accepted:
249 extensions = self.scope.get("extensions", {}) or {}
250 if "websocket.http.response" in extensions:
251 headers = [
252 (key.lower().encode(), value.encode())
253 for key, value in response.headers.items()
254 ]
255 await send(
256 cast(
257 WebsocketResponseStartEvent,
258 {
259 "type": "websocket.http.response.start",
260 "status": response.status_code,
261 "headers": headers,
262 },
263 )
264 )
265 if isinstance(response, WerkzeugResponse):
266 for data in response.response:
267 await send(
268 cast(
269 WebsocketResponseBodyEvent,
270 {
271 "type": "websocket.http.response.body",
272 "body": data,
273 "more_body": True,
274 },
275 )
276 )
277 elif isinstance(response, Response):
278 async with response.response as body:
279 async for data in body:
280 await send(
281 cast(
282 WebsocketResponseBodyEvent,
283 {
284 "type": "websocket.http.response.body",
285 "body": data,
286 "more_body": True,
287 },
288 )
289 )
290 await send(
291 cast(
292 WebsocketResponseBodyEvent,
293 {
294 "type": "websocket.http.response.body",
295 "body": b"",
296 "more_body": False,
297 },

Callers 1

__call__Method · 0.95

Calls 3

_handle_exceptionFunction · 0.85
sendFunction · 0.85
getMethod · 0.45

Tested by

no test coverage detected