Skip to content

Commit 2b44645

Browse files
committed
rewrite HttpRequestHandler to HttpMessageHandler
to only handle message with it class, without sockets
1 parent 464eff1 commit 2b44645

File tree

1 file changed

+28
-32
lines changed

1 file changed

+28
-32
lines changed

martin_eden/core.py

+28-32
Original file line numberDiff line numberDiff line change
@@ -24,24 +24,24 @@ async def get_openapi_schema() -> str:
2424
return json.dumps(OpenApiBuilder().openapi_object)
2525

2626

27-
class HttpRequestHandler:
28-
def __init__(
29-
self, event_loop: AbstractEventLoop, client_socket: socket.socket,
30-
) -> None:
31-
self.event_loop = event_loop
32-
self.client_socket = client_socket
27+
class HttpMessageHandler:
28+
def __init__(self, message: bytes) -> None:
29+
self.http_message = message.decode('utf8')
3330

34-
async def handle_request(self) -> None:
35-
http_message: str = await self._read_message_from_socket()
36-
http_parser = HttpHeadersParser(http_message)
31+
async def handle_request(self) -> bytes:
32+
http_parser = HttpHeadersParser(self.http_message)
3733

3834
if http_parser.method_name == HttpMethod.OPTIONS:
39-
return await self._send_response_for_options_method()
35+
return self._get_response_for_options_method()
4036

4137
try:
42-
controller = get_controller(http_parser.path, http_parser.method_name)
38+
controller = get_controller(
39+
http_parser.path, http_parser.method_name,
40+
)
4341
except FindControllerError:
44-
return await self._write_post_or_get_response_to_socket('404 not found')
42+
return self._get_response_for_get_and_post_methods(
43+
'404 not found'
44+
)
4545

4646
if http_parser.method_name == HttpMethod.POST:
4747
response = await self._get_response_for_post_method(
@@ -52,28 +52,17 @@ async def handle_request(self) -> None:
5252
controller, http_parser.query_params,
5353
)
5454

55-
await self._write_post_or_get_response_to_socket(response)
55+
return self._get_response_for_get_and_post_methods(response)
5656

57-
async def _write_post_or_get_response_to_socket(
58-
self, response: str,
59-
) -> None:
57+
@staticmethod
58+
def _get_response_for_get_and_post_methods(response: str) -> bytes:
6059
headers = create_response_headers(200, content_type='application/json')
61-
await self.event_loop.sock_sendall(
62-
self.client_socket, (headers + response).encode('utf8'),
63-
)
64-
self.client_socket.close()
65-
66-
async def _read_message_from_socket(self) -> str:
67-
data = await self.event_loop.sock_recv(self.client_socket, 1024)
68-
message = data.decode()
69-
return message
60+
return (headers + response).encode('utf8')
7061

71-
async def _send_response_for_options_method(self) -> None:
62+
@staticmethod
63+
def _get_response_for_options_method() -> bytes:
7264
headers: str = create_response_headers(200, for_options=True)
73-
await self.event_loop.sock_sendall(
74-
self.client_socket, headers.encode('utf8'),
75-
)
76-
self.client_socket.close()
65+
return headers.encode('utf8')
7766

7867
async def _get_response_for_get_method(
7968
self, controller: Controller, query_params: dict,
@@ -178,8 +167,15 @@ def _configure_sockets(self) -> None:
178167
self.server_socket.bind(server_address)
179168

180169
async def handle_request(self, client_socket: socket.socket) -> None:
181-
handler = HttpRequestHandler(self.event_loop, client_socket)
182-
await handler.handle_request()
170+
message = b''
171+
while chunk := await self.event_loop.sock_recv(client_socket, 1024):
172+
message += chunk
173+
174+
handler = HttpMessageHandler(message)
175+
message = await handler.handle_request()
176+
177+
await self.event_loop.sock_sendall(client_socket, message)
178+
client_socket.close()
183179

184180
async def main(self) -> None:
185181
"""The method listen server socket for connections, if connection

0 commit comments

Comments
 (0)