Skip to content

Commit

Permalink
replace urllib3 with requests to get cookie support
Browse files Browse the repository at this point in the history
  • Loading branch information
miguelgrinberg committed Feb 15, 2019
1 parent 2ec41b6 commit 41b8e29
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 39 deletions.
32 changes: 16 additions & 16 deletions engineio/client.py
Expand Up @@ -10,9 +10,9 @@
import six
from six.moves import urllib
try:
import urllib3
import requests
except ImportError: # pragma: no cover
urllib3 = None
requests = None
try:
import websocket
except ImportError: # pragma: no cover
Expand Down Expand Up @@ -256,10 +256,10 @@ def _reset(self):

def _connect_polling(self, url, headers, engineio_path):
"""Establish a long-polling connection to the Engine.IO server."""
if urllib3 is None: # pragma: no cover
if requests is None: # pragma: no cover
# not installed
self.logger.error('urllib3 is not installed -- cannot make HTTP '
'requests!')
self.logger.error('requests package is not installed -- cannot '
'send HTTP requests!')
return
self.base_url = self._get_engineio_url(url, engineio_path, 'polling')
self.logger.info('Attempting polling connection to ' + self.base_url)
Expand All @@ -269,12 +269,12 @@ def _connect_polling(self, url, headers, engineio_path):
self._reset()
raise exceptions.ConnectionError(
'Connection refused by the server')
if r.status != 200:
if r.status_code != 200:
raise exceptions.ConnectionError(
'Unexpected status code {} in server response'.format(
r.status))
r.status_code))
try:
p = payload.Payload(encoded_payload=r.data)
p = payload.Payload(encoded_payload=r.content)
except ValueError:
six.raise_from(exceptions.ConnectionError(
'Unexpected response from server'), None)
Expand Down Expand Up @@ -428,10 +428,10 @@ def _send_packet(self, pkt):
def _send_request(
self, method, url, headers=None, body=None): # pragma: no cover
if self.http is None:
self.http = urllib3.PoolManager()
self.http = requests.Session()
try:
return self.http.request(method, url, headers=headers, body=body)
except urllib3.exceptions.MaxRetryError:
return self.http.request(method, url, headers=headers, data=body)
except requests.exceptions.ConnectionError:
pass

def _trigger_event(self, event, *args, **kwargs):
Expand Down Expand Up @@ -502,13 +502,13 @@ def _read_loop_polling(self):
'Connection refused by the server, aborting')
self.queue.put(None)
break
if r.status != 200:
if r.status_code != 200:
self.logger.warning('Unexpected status code %s in server '
'response, aborting', r.status)
'response, aborting', r.status_code)
self.queue.put(None)
break
try:
p = payload.Payload(encoded_payload=r.data)
p = payload.Payload(encoded_payload=r.content)
except ValueError:
self.logger.warning(
'Unexpected packet from server, aborting')
Expand Down Expand Up @@ -609,9 +609,9 @@ def _write_loop(self):
self.logger.warning(
'Connection refused by the server, aborting')
break
if r.status != 200:
if r.status_code != 200:
self.logger.warning('Unexpected status code %s in server '
'response, aborting', r.status)
'response, aborting', r.status_code)
self._reset()
break
else:
Expand Down
2 changes: 1 addition & 1 deletion setup.py
Expand Up @@ -34,7 +34,7 @@
],
extras_require={
'client': [
'urllib3>=1.24',
'requests>=2.21.0',
'websocket-client>=0.54.0',
],
'asyncio_client': [
Expand Down
42 changes: 21 additions & 21 deletions tests/common/test_client.py
Expand Up @@ -286,21 +286,21 @@ def test_polling_connection_failed(self, _send_request, _time):

@mock.patch('engineio.client.Client._send_request')
def test_polling_connection_404(self, _send_request):
_send_request.return_value.status = 404
_send_request.return_value.status_code = 404
c = client.Client()
self.assertRaises(exceptions.ConnectionError, c.connect, 'http://foo')

@mock.patch('engineio.client.Client._send_request')
def test_polling_connection_invalid_packet(self, _send_request):
_send_request.return_value.status = 200
_send_request.return_value.data = b'foo'
_send_request.return_value.status_code = 200
_send_request.return_value.content = b'foo'
c = client.Client()
self.assertRaises(exceptions.ConnectionError, c.connect, 'http://foo')

@mock.patch('engineio.client.Client._send_request')
def test_polling_connection_no_open_packet(self, _send_request):
_send_request.return_value.status = 200
_send_request.return_value.data = payload.Payload(packets=[
_send_request.return_value.status_code = 200
_send_request.return_value.content = payload.Payload(packets=[
packet.Packet(packet.CLOSE, {
'sid': '123', 'upgrades': [], 'pingInterval': 10,
'pingTimeout': 20
Expand All @@ -311,8 +311,8 @@ def test_polling_connection_no_open_packet(self, _send_request):

@mock.patch('engineio.client.Client._send_request')
def test_polling_connection_successful(self, _send_request):
_send_request.return_value.status = 200
_send_request.return_value.data = payload.Payload(packets=[
_send_request.return_value.status_code = 200
_send_request.return_value.content = payload.Payload(packets=[
packet.Packet(packet.OPEN, {
'sid': '123', 'upgrades': [], 'pingInterval': 1000,
'pingTimeout': 2000
Expand Down Expand Up @@ -345,8 +345,8 @@ def test_polling_connection_successful(self, _send_request):

@mock.patch('engineio.client.Client._send_request')
def test_polling_connection_with_more_packets(self, _send_request):
_send_request.return_value.status = 200
_send_request.return_value.data = payload.Payload(packets=[
_send_request.return_value.status_code = 200
_send_request.return_value.content = payload.Payload(packets=[
packet.Packet(packet.OPEN, {
'sid': '123', 'upgrades': [], 'pingInterval': 1000,
'pingTimeout': 2000
Expand All @@ -370,8 +370,8 @@ def test_polling_connection_with_more_packets(self, _send_request):

@mock.patch('engineio.client.Client._send_request')
def test_polling_connection_upgraded(self, _send_request):
_send_request.return_value.status = 200
_send_request.return_value.data = payload.Payload(packets=[
_send_request.return_value.status_code = 200
_send_request.return_value.content = payload.Payload(packets=[
packet.Packet(packet.OPEN, {
'sid': '123', 'upgrades': ['websocket'], 'pingInterval': 1000,
'pingTimeout': 2000
Expand All @@ -397,8 +397,8 @@ def test_polling_connection_upgraded(self, _send_request):

@mock.patch('engineio.client.Client._send_request')
def test_polling_connection_not_upgraded(self, _send_request):
_send_request.return_value.status = 200
_send_request.return_value.data = payload.Payload(packets=[
_send_request.return_value.status_code = 200
_send_request.return_value.content = payload.Payload(packets=[
packet.Packet(packet.OPEN, {
'sid': '123', 'upgrades': ['websocket'], 'pingInterval': 1000,
'pingTimeout': 2000
Expand Down Expand Up @@ -759,7 +759,7 @@ def test_read_loop_polling_bad_status(self, _time):
c.base_url = 'http://foo'
c.queue = mock.MagicMock()
c._send_request = mock.MagicMock()
c._send_request.return_value.status = 400
c._send_request.return_value.status_code = 400
c.write_loop_task = mock.MagicMock()
c.ping_loop_task = mock.MagicMock()
c._read_loop_polling()
Expand All @@ -776,8 +776,8 @@ def test_read_loop_polling_bad_packet(self, _time):
c.base_url = 'http://foo'
c.queue = mock.MagicMock()
c._send_request = mock.MagicMock()
c._send_request.return_value.status = 200
c._send_request.return_value.data = b'foo'
c._send_request.return_value.status_code = 200
c._send_request.return_value.content = b'foo'
c.write_loop_task = mock.MagicMock()
c.ping_loop_task = mock.MagicMock()
c._read_loop_polling()
Expand All @@ -794,7 +794,7 @@ def test_read_loop_polling(self):
c.queue = mock.MagicMock()
c._send_request = mock.MagicMock()
c._send_request.side_effect = [
mock.MagicMock(status=200, data=payload.Payload(packets=[
mock.MagicMock(status_code=200, content=payload.Payload(packets=[
packet.Packet(packet.PING),
packet.Packet(packet.NOOP)]).encode()),
None
Expand Down Expand Up @@ -910,7 +910,7 @@ def test_write_loop_polling_one_packet(self):
RuntimeError
]
c._send_request = mock.MagicMock()
c._send_request.return_value.status = 200
c._send_request.return_value.status_code = 200
c._write_loop()
self.assertEqual(c.queue.task_done.call_count, 1)
p = payload.Payload(
Expand All @@ -936,7 +936,7 @@ def test_write_loop_polling_three_packets(self):
RuntimeError
]
c._send_request = mock.MagicMock()
c._send_request.return_value.status = 200
c._send_request.return_value.status_code = 200
c._write_loop()
self.assertEqual(c.queue.task_done.call_count, 3)
p = payload.Payload(packets=[
Expand Down Expand Up @@ -964,7 +964,7 @@ def test_write_loop_polling_two_packets_done(self):
RuntimeError
]
c._send_request = mock.MagicMock()
c._send_request.return_value.status = 200
c._send_request.return_value.status_code = 200
c._write_loop()
self.assertEqual(c.queue.task_done.call_count, 3)
p = payload.Payload(packets=[
Expand Down Expand Up @@ -1014,7 +1014,7 @@ def test_write_loop_polling_bad_status(self):
RuntimeError,
]
c._send_request = mock.MagicMock()
c._send_request.return_value.status = 500
c._send_request.return_value.status_code = 500
c._write_loop()
self.assertEqual(c.queue.task_done.call_count, 1)
p = payload.Payload(
Expand Down
2 changes: 1 addition & 1 deletion tox.ini
Expand Up @@ -13,7 +13,7 @@ deps=
eventlet
aiohttp
tornado
urllib3
requests
websocket-client
websockets
basepython =
Expand Down

0 comments on commit 41b8e29

Please sign in to comment.