@@ -24,24 +24,24 @@ async def get_openapi_schema() -> str:
24
24
return json .dumps (OpenApiBuilder ().openapi_object )
25
25
26
26
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' )
33
30
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 )
37
33
38
34
if http_parser .method_name == HttpMethod .OPTIONS :
39
- return await self ._send_response_for_options_method ()
35
+ return self ._get_response_for_options_method ()
40
36
41
37
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
+ )
43
41
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
+ )
45
45
46
46
if http_parser .method_name == HttpMethod .POST :
47
47
response = await self ._get_response_for_post_method (
@@ -52,28 +52,17 @@ async def handle_request(self) -> None:
52
52
controller , http_parser .query_params ,
53
53
)
54
54
55
- await self ._write_post_or_get_response_to_socket (response )
55
+ return self ._get_response_for_get_and_post_methods (response )
56
56
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 :
60
59
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' )
70
61
71
- async def _send_response_for_options_method (self ) -> None :
62
+ @staticmethod
63
+ def _get_response_for_options_method () -> bytes :
72
64
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' )
77
66
78
67
async def _get_response_for_get_method (
79
68
self , controller : Controller , query_params : dict ,
@@ -178,8 +167,15 @@ def _configure_sockets(self) -> None:
178
167
self .server_socket .bind (server_address )
179
168
180
169
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 ()
183
179
184
180
async def main (self ) -> None :
185
181
"""The method listen server socket for connections, if connection
0 commit comments