From 60a172e8ef4ea340e063cd23729c56ede5297151 Mon Sep 17 00:00:00 2001 From: Chris Angelico Date: Sat, 7 Oct 2023 10:27:25 +1100 Subject: [PATCH 1/2] Allow plain integers as HTTP status codes --- src/websockets/legacy/server.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/websockets/legacy/server.py b/src/websockets/legacy/server.py index c9b32c41..36516c2d 100644 --- a/src/websockets/legacy/server.py +++ b/src/websockets/legacy/server.py @@ -217,6 +217,7 @@ async def handler(self) -> None: ), ) + status = http.HTTPStatus(status) headers.setdefault("Date", email.utils.formatdate(usegmt=True)) if self.server_header is not None: headers.setdefault("Server", self.server_header) From 9aa60ecd5297fff5d693606e38e0eb2acdeaa1ed Mon Sep 17 00:00:00 2001 From: Chris Angelico Date: Sat, 7 Oct 2023 20:54:16 +1100 Subject: [PATCH 2/2] Add a test for numeric status code responses --- tests/legacy/test_client_server.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tests/legacy/test_client_server.py b/tests/legacy/test_client_server.py index c49d91b7..2e464711 100644 --- a/tests/legacy/test_client_server.py +++ b/tests/legacy/test_client_server.py @@ -543,6 +543,17 @@ def test_process_request_override(self): with contextlib.closing(response): self.assertEqual(response.code, 200) + class ProcessRequestOKServerProtocolNumeric(WebSocketServerProtocol): + async def process_request(self, path, request_headers): + return 200, [], b"OK\n" + + @with_server(create_protocol=ProcessRequestOKServerProtocolNumeric) + def test_numeric_response_code(self): + response = self.loop.run_until_complete(self.make_http_request("/")) + + with contextlib.closing(response): + self.assertEqual(response.code, 200) + class LegacyProcessRequestOKServerProtocol(WebSocketServerProtocol): def process_request(self, path, request_headers): return http.HTTPStatus.OK, [], b"OK\n"