Skip to content

Commit ec0da4a

Browse files
committed
Update aiohttp async driver. Use native public aiohttp API
1 parent 04e7c4d commit ec0da4a

File tree

2 files changed

+25
-22
lines changed

2 files changed

+25
-22
lines changed

src/engineio/async_drivers/aiohttp.py

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import asyncio
22
import sys
3-
from urllib.parse import urlsplit
43

54
from aiohttp.web import Response, WebSocketResponse
5+
from aiohttp.web_request import Request
66

77

88
def create_route(app, engineio_server, engineio_endpoint):
@@ -18,35 +18,31 @@ def create_route(app, engineio_server, engineio_endpoint):
1818
engineio_server.handle_request)
1919

2020

21-
def translate_request(request):
21+
def translate_request(request: Request):
2222
"""This function takes the arguments passed to the request handler and
2323
uses them to generate a WSGI compatible environ dictionary.
2424
"""
25-
message = request._message
26-
payload = request._payload
27-
28-
uri_parts = urlsplit(message.path)
2925
environ = {
30-
'wsgi.input': payload,
26+
'wsgi.input': request.content,
3127
'wsgi.errors': sys.stderr,
3228
'wsgi.version': (1, 0),
3329
'wsgi.async': True,
3430
'wsgi.multithread': False,
3531
'wsgi.multiprocess': False,
3632
'wsgi.run_once': False,
3733
'SERVER_SOFTWARE': 'aiohttp',
38-
'REQUEST_METHOD': message.method,
39-
'QUERY_STRING': uri_parts.query or '',
40-
'RAW_URI': message.path,
41-
'SERVER_PROTOCOL': 'HTTP/%s.%s' % message.version,
34+
'REQUEST_METHOD': request.method,
35+
'QUERY_STRING': request.query_string or '',
36+
'RAW_URI': request.path_qs,
37+
'SERVER_PROTOCOL': 'HTTP/%s.%s' % request.version,
4238
'REMOTE_ADDR': '127.0.0.1',
4339
'REMOTE_PORT': '0',
4440
'SERVER_NAME': 'aiohttp',
4541
'SERVER_PORT': '0',
4642
'aiohttp.request': request
4743
}
4844

49-
for hdr_name, hdr_value in message.headers.items():
45+
for hdr_name, hdr_value in request.headers.items():
5046
hdr_name = hdr_name.upper()
5147
if hdr_name == 'CONTENT-TYPE':
5248
environ['CONTENT_TYPE'] = hdr_value
@@ -63,9 +59,7 @@ def translate_request(request):
6359

6460
environ['wsgi.url_scheme'] = environ.get('HTTP_X_FORWARDED_PROTO', 'http')
6561

66-
path_info = uri_parts.path
67-
68-
environ['PATH_INFO'] = path_info
62+
environ['PATH_INFO'] = request.path
6963
environ['SCRIPT_NAME'] = ''
7064

7165
return environ

tests/async/test_aiohttp.py

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from unittest import mock
2-
2+
from aiohttp.web import Request
33
from engineio.async_drivers import aiohttp as async_aiohttp
44

55

@@ -12,18 +12,27 @@ def test_create_route(self):
1212
app.router.add_post.assert_any_call('/foo', mock_server.handle_request)
1313

1414
def test_translate_request(self):
15-
request = mock.MagicMock()
16-
request._message.method = 'PUT'
17-
request._message.path = '/foo/bar?baz=1'
18-
request._message.version = (1, 1)
19-
request._message.headers = {
15+
message = mock.MagicMock()
16+
message.method = 'PUT'
17+
message.path = '/foo/bar?baz=1'
18+
message.version = (1, 1)
19+
message.headers = {
2020
'a': 'b',
2121
'c-c': 'd',
2222
'c_c': 'e',
2323
'content-type': 'application/json',
2424
'content-length': 123,
2525
}
26-
request._payload = b'hello world'
26+
27+
request = Request(
28+
message,
29+
payload=b'hello world',
30+
protocol=mock.MagicMock(),
31+
payload_writer=mock.MagicMock(),
32+
task=mock.MagicMock(),
33+
loop=mock.MagicMock(),
34+
)
35+
2736
environ = async_aiohttp.translate_request(request)
2837
expected_environ = {
2938
'REQUEST_METHOD': 'PUT',

0 commit comments

Comments
 (0)