Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions mangum/protocols/http.py
Original file line number Diff line number Diff line change
Expand Up @@ -110,9 +110,6 @@ async def send(self, message: Message) -> None:
Awaited by the application to send ASGI `http` events.
"""
message_type = message["type"]
self.logger.info(
"%s: '%s' event received from application.", self.state, message_type
)

if (
self.state is HTTPCycleState.REQUEST
Expand Down Expand Up @@ -143,6 +140,12 @@ async def send(self, message: Message) -> None:
self.state = HTTPCycleState.COMPLETE
await self.app_queue.put({"type": "http.disconnect"})

self.logger.info(
Comment thread
aminalaee marked this conversation as resolved.
f'"{self.request.method} {self.request.path} '
f'HTTP {self.request.http_version}" '
f"{self.response.status} {len(self.response.body)}"
)

else:
raise UnexpectedMessage(
f"{self.state}: Unexpected '{message_type}' event received."
Expand Down
9 changes: 6 additions & 3 deletions mangum/protocols/websockets.py
Original file line number Diff line number Diff line change
Expand Up @@ -135,9 +135,6 @@ async def send(self, message: Message) -> None:
Awaited by the application to send ASGI `websocket` events.
"""
message_type = message["type"]
self.logger.info(
"%s: '%s' event received from application.", self.state, message_type
)

if self.state is WebSocketCycleState.HANDSHAKE and message_type in (
"websocket.accept",
Expand Down Expand Up @@ -192,6 +189,12 @@ async def send(self, message: Message) -> None:
await self.websocket.post_to_connection(self.connection_id, body=body)
await self.app_queue.put({"type": "websocket.disconnect", "code": 1000})

self.logger.info(
Comment thread
aminalaee marked this conversation as resolved.
Outdated
f'"WS {self.request.path} '
f'HTTP {self.request.http_version}" '
f"{self.response.status} {len(self.response.body)}"
)

else:
raise UnexpectedMessage(
f"{self.state}: Unexpected '{message_type}' event received."
Expand Down
30 changes: 30 additions & 0 deletions tests/test_http.py
Original file line number Diff line number Diff line change
Expand Up @@ -603,3 +603,33 @@ async def app(scope, receive, send):
"vary": "Accept-Encoding",
}
assert response["body"] == base64.b64encode(brotli.compress(body.encode())).decode()


@pytest.mark.parametrize(
"mock_aws_api_gateway_event", [["GET", b"", None]], indirect=True
)
def test_http_logging(mock_aws_api_gateway_event, caplog) -> None:
async def app(scope, receive, send):
assert scope["type"] == "http"
await send(
{
"type": "http.response.start",
"status": 200,
"headers": [[b"content-type", b"text/plain; charset=utf-8"]],
}
)

await send({"type": "http.response.body", "body": b"Hello, world!"})

handler = Mangum(app, lifespan="off")
response = handler(mock_aws_api_gateway_event, {})

assert response == {
"statusCode": 200,
"isBase64Encoded": False,
"headers": {"content-type": "text/plain; charset=utf-8"},
"multiValueHeaders": {},
"body": "Hello, world!",
}

assert '"GET /test/hello HTTP 1.1" 200 13' in caplog.text
15 changes: 15 additions & 0 deletions tests/test_websockets.py
Original file line number Diff line number Diff line change
Expand Up @@ -107,3 +107,18 @@ async def app(scope, receive, send):

response = handler(mock_ws_send_event, {})
assert response == {"statusCode": 500}


@respx.mock(assert_all_mocked=False)
def test_websocket_logging(
sqlite3_dsn, mock_ws_connect_event, mock_ws_send_event, mock_websocket_app, caplog
) -> None:
handler = Mangum(mock_websocket_app, lifespan="off", dsn=sqlite3_dsn)
response = handler(mock_ws_connect_event, {})
assert response == {"statusCode": 200}

del mock_ws_send_event["body"]
response = handler(mock_ws_send_event, {})
assert response == {"statusCode": 200}

assert '"WS / HTTP 1.1" 200 0' in caplog.text