Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
async def asgi_send(self, message: ASGIMessage) -> None:
if self.state is ASGICycleState.REQUEST:
if message["type"] in ("websocket.accept", "websocket.close"):
self.state = ASGICycleState.RESPONSE
else:
raise RuntimeError(
f"Expected 'websocket.accept' or 'websocket.close', received: {message['type']}"
)
else:
data = message.get("text")
if message["type"] == "websocket.send":
group = message.get("group", None)
self.send_data(data=data, group=group)
if self.state is ASGICycleState.REQUEST:
if message["type"] != "http.response.start":
raise RuntimeError(
f"Expected 'http.response.start', received: {message['type']}"
)
status_code = message["status"]
headers = {k: v for k, v in message.get("headers", [])}
self.response["statusCode"] = status_code
self.response["isBase64Encoded"] = self.binary
self.response["headers"] = {
k.decode(): v.decode() for k, v in headers.items()
}
self.state = ASGICycleState.RESPONSE
elif self.state is ASGICycleState.RESPONSE:
if message["type"] != "http.response.body":
raise RuntimeError(
f"Expected 'http.response.body', received: {message['type']}"
)
body = message.get("body", b"")
more_body = message.get("more_body", False)
# The body must be completely read before returning the response.
self.body += body
if not more_body:
body = self.body
if self.binary:
body = base64.b64encode(body)
self.response["body"] = body.decode()