python-engineio 4.12.0__tar.gz → 4.12.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. {python_engineio-4.12.0/src/python_engineio.egg-info → python_engineio-4.12.2}/PKG-INFO +2 -2
  2. {python_engineio-4.12.0 → python_engineio-4.12.2}/pyproject.toml +2 -2
  3. {python_engineio-4.12.0 → python_engineio-4.12.2}/src/engineio/async_client.py +10 -7
  4. {python_engineio-4.12.0 → python_engineio-4.12.2}/src/engineio/async_drivers/asgi.py +6 -1
  5. {python_engineio-4.12.0 → python_engineio-4.12.2}/src/engineio/base_client.py +12 -1
  6. {python_engineio-4.12.0 → python_engineio-4.12.2}/src/engineio/client.py +9 -6
  7. {python_engineio-4.12.0 → python_engineio-4.12.2/src/python_engineio.egg-info}/PKG-INFO +2 -2
  8. {python_engineio-4.12.0 → python_engineio-4.12.2}/tests/async/test_client.py +11 -11
  9. {python_engineio-4.12.0 → python_engineio-4.12.2}/tests/common/test_client.py +13 -12
  10. {python_engineio-4.12.0 → python_engineio-4.12.2}/LICENSE +0 -0
  11. {python_engineio-4.12.0 → python_engineio-4.12.2}/MANIFEST.in +0 -0
  12. {python_engineio-4.12.0 → python_engineio-4.12.2}/README.md +0 -0
  13. {python_engineio-4.12.0 → python_engineio-4.12.2}/docs/Makefile +0 -0
  14. {python_engineio-4.12.0 → python_engineio-4.12.2}/docs/_static/README.md +0 -0
  15. {python_engineio-4.12.0 → python_engineio-4.12.2}/docs/api.rst +0 -0
  16. {python_engineio-4.12.0 → python_engineio-4.12.2}/docs/client.rst +0 -0
  17. {python_engineio-4.12.0 → python_engineio-4.12.2}/docs/conf.py +0 -0
  18. {python_engineio-4.12.0 → python_engineio-4.12.2}/docs/index.rst +0 -0
  19. {python_engineio-4.12.0 → python_engineio-4.12.2}/docs/intro.rst +0 -0
  20. {python_engineio-4.12.0 → python_engineio-4.12.2}/docs/make.bat +0 -0
  21. {python_engineio-4.12.0 → python_engineio-4.12.2}/docs/server.rst +0 -0
  22. {python_engineio-4.12.0 → python_engineio-4.12.2}/setup.cfg +0 -0
  23. {python_engineio-4.12.0 → python_engineio-4.12.2}/src/engineio/__init__.py +0 -0
  24. {python_engineio-4.12.0 → python_engineio-4.12.2}/src/engineio/async_drivers/__init__.py +0 -0
  25. {python_engineio-4.12.0 → python_engineio-4.12.2}/src/engineio/async_drivers/_websocket_wsgi.py +0 -0
  26. {python_engineio-4.12.0 → python_engineio-4.12.2}/src/engineio/async_drivers/aiohttp.py +0 -0
  27. {python_engineio-4.12.0 → python_engineio-4.12.2}/src/engineio/async_drivers/eventlet.py +0 -0
  28. {python_engineio-4.12.0 → python_engineio-4.12.2}/src/engineio/async_drivers/gevent.py +0 -0
  29. {python_engineio-4.12.0 → python_engineio-4.12.2}/src/engineio/async_drivers/gevent_uwsgi.py +0 -0
  30. {python_engineio-4.12.0 → python_engineio-4.12.2}/src/engineio/async_drivers/sanic.py +0 -0
  31. {python_engineio-4.12.0 → python_engineio-4.12.2}/src/engineio/async_drivers/threading.py +0 -0
  32. {python_engineio-4.12.0 → python_engineio-4.12.2}/src/engineio/async_drivers/tornado.py +0 -0
  33. {python_engineio-4.12.0 → python_engineio-4.12.2}/src/engineio/async_server.py +0 -0
  34. {python_engineio-4.12.0 → python_engineio-4.12.2}/src/engineio/async_socket.py +0 -0
  35. {python_engineio-4.12.0 → python_engineio-4.12.2}/src/engineio/base_server.py +0 -0
  36. {python_engineio-4.12.0 → python_engineio-4.12.2}/src/engineio/base_socket.py +0 -0
  37. {python_engineio-4.12.0 → python_engineio-4.12.2}/src/engineio/exceptions.py +0 -0
  38. {python_engineio-4.12.0 → python_engineio-4.12.2}/src/engineio/json.py +0 -0
  39. {python_engineio-4.12.0 → python_engineio-4.12.2}/src/engineio/middleware.py +0 -0
  40. {python_engineio-4.12.0 → python_engineio-4.12.2}/src/engineio/packet.py +0 -0
  41. {python_engineio-4.12.0 → python_engineio-4.12.2}/src/engineio/payload.py +0 -0
  42. {python_engineio-4.12.0 → python_engineio-4.12.2}/src/engineio/server.py +0 -0
  43. {python_engineio-4.12.0 → python_engineio-4.12.2}/src/engineio/socket.py +0 -0
  44. {python_engineio-4.12.0 → python_engineio-4.12.2}/src/engineio/static_files.py +0 -0
  45. {python_engineio-4.12.0 → python_engineio-4.12.2}/src/python_engineio.egg-info/SOURCES.txt +0 -0
  46. {python_engineio-4.12.0 → python_engineio-4.12.2}/src/python_engineio.egg-info/dependency_links.txt +0 -0
  47. {python_engineio-4.12.0 → python_engineio-4.12.2}/src/python_engineio.egg-info/not-zip-safe +0 -0
  48. {python_engineio-4.12.0 → python_engineio-4.12.2}/src/python_engineio.egg-info/requires.txt +0 -0
  49. {python_engineio-4.12.0 → python_engineio-4.12.2}/src/python_engineio.egg-info/top_level.txt +0 -0
  50. {python_engineio-4.12.0 → python_engineio-4.12.2}/tests/__init__.py +0 -0
  51. {python_engineio-4.12.0 → python_engineio-4.12.2}/tests/async/__init__.py +0 -0
  52. {python_engineio-4.12.0 → python_engineio-4.12.2}/tests/async/index.html +0 -0
  53. {python_engineio-4.12.0 → python_engineio-4.12.2}/tests/async/test_aiohttp.py +0 -0
  54. {python_engineio-4.12.0 → python_engineio-4.12.2}/tests/async/test_asgi.py +0 -0
  55. {python_engineio-4.12.0 → python_engineio-4.12.2}/tests/async/test_sanic.py +0 -0
  56. {python_engineio-4.12.0 → python_engineio-4.12.2}/tests/async/test_server.py +0 -0
  57. {python_engineio-4.12.0 → python_engineio-4.12.2}/tests/async/test_socket.py +0 -0
  58. {python_engineio-4.12.0 → python_engineio-4.12.2}/tests/async/test_tornado.py +0 -0
  59. {python_engineio-4.12.0 → python_engineio-4.12.2}/tests/common/__init__.py +0 -0
  60. {python_engineio-4.12.0 → python_engineio-4.12.2}/tests/common/index.html +0 -0
  61. {python_engineio-4.12.0 → python_engineio-4.12.2}/tests/common/test_middleware.py +0 -0
  62. {python_engineio-4.12.0 → python_engineio-4.12.2}/tests/common/test_packet.py +0 -0
  63. {python_engineio-4.12.0 → python_engineio-4.12.2}/tests/common/test_payload.py +0 -0
  64. {python_engineio-4.12.0 → python_engineio-4.12.2}/tests/common/test_server.py +0 -0
  65. {python_engineio-4.12.0 → python_engineio-4.12.2}/tests/common/test_socket.py +0 -0
  66. {python_engineio-4.12.0 → python_engineio-4.12.2}/tests/performance/README.md +0 -0
  67. {python_engineio-4.12.0 → python_engineio-4.12.2}/tests/performance/binary_b64_packet.py +0 -0
  68. {python_engineio-4.12.0 → python_engineio-4.12.2}/tests/performance/binary_packet.py +0 -0
  69. {python_engineio-4.12.0 → python_engineio-4.12.2}/tests/performance/json_packet.py +0 -0
  70. {python_engineio-4.12.0 → python_engineio-4.12.2}/tests/performance/payload.py +0 -0
  71. {python_engineio-4.12.0 → python_engineio-4.12.2}/tests/performance/run.sh +0 -0
  72. {python_engineio-4.12.0 → python_engineio-4.12.2}/tests/performance/server_receive.py +0 -0
  73. {python_engineio-4.12.0 → python_engineio-4.12.2}/tests/performance/text_packet.py +0 -0
  74. {python_engineio-4.12.0 → python_engineio-4.12.2}/tox.ini +0 -0
@@ -1,14 +1,14 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-engineio
3
- Version: 4.12.0
3
+ Version: 4.12.2
4
4
  Summary: Engine.IO server and client for Python
5
5
  Author-email: Miguel Grinberg <miguel.grinberg@gmail.com>
6
+ License: MIT
6
7
  Project-URL: Homepage, https://github.com/miguelgrinberg/python-engineio
7
8
  Project-URL: Bug Tracker, https://github.com/miguelgrinberg/python-engineio/issues
8
9
  Classifier: Environment :: Web Environment
9
10
  Classifier: Intended Audience :: Developers
10
11
  Classifier: Programming Language :: Python :: 3
11
- Classifier: License :: OSI Approved :: MIT License
12
12
  Classifier: Operating System :: OS Independent
13
13
  Requires-Python: >=3.6
14
14
  Description-Content-Type: text/markdown
@@ -1,13 +1,13 @@
1
1
  [project]
2
2
  name = "python-engineio"
3
- version = "4.12.0"
3
+ version = "4.12.2"
4
+ license = {text = "MIT"}
4
5
  authors = [{name = "Miguel Grinberg", email = "miguel.grinberg@gmail.com"}]
5
6
  description = "Engine.IO server and client for Python"
6
7
  classifiers = [
7
8
  "Environment :: Web Environment",
8
9
  "Intended Audience :: Developers",
9
10
  "Programming Language :: Python :: 3",
10
- "License :: OSI Approved :: MIT License",
11
11
  "Operating System :: OS Independent",
12
12
  ]
13
13
  requires-python = ">=3.6"
@@ -126,7 +126,6 @@ class AsyncClient(base_client.BaseClient):
126
126
  if not transports:
127
127
  raise ValueError('No valid transports provided')
128
128
  self.transports = transports or valid_transports
129
- self.queue = self.create_queue()
130
129
  return await getattr(self, '_connect_' + self.transports[0])(
131
130
  url, headers or {}, engineio_path)
132
131
 
@@ -199,11 +198,15 @@ class AsyncClient(base_client.BaseClient):
199
198
  """
200
199
  return await asyncio.sleep(seconds)
201
200
 
202
- def create_queue(self):
201
+ def create_queue(self, *args, **kwargs):
203
202
  """Create a queue object."""
204
- q = asyncio.Queue()
205
- q.Empty = asyncio.QueueEmpty
206
- return q
203
+ return asyncio.Queue(*args, **kwargs)
204
+
205
+ def get_queue_empty_exception(self):
206
+ """Return the queue empty exception raised by queues created by the
207
+ ``create_queue()`` method.
208
+ """
209
+ return asyncio.QueueEmpty
207
210
 
208
211
  def create_event(self):
209
212
  """Create an event object."""
@@ -624,7 +627,7 @@ class AsyncClient(base_client.BaseClient):
624
627
  packets = None
625
628
  try:
626
629
  packets = [await asyncio.wait_for(self.queue.get(), timeout)]
627
- except (self.queue.Empty, asyncio.TimeoutError):
630
+ except (self.queue_empty, asyncio.TimeoutError):
628
631
  self.logger.error('packet queue is empty, aborting')
629
632
  break
630
633
  except asyncio.CancelledError: # pragma: no cover
@@ -636,7 +639,7 @@ class AsyncClient(base_client.BaseClient):
636
639
  while True:
637
640
  try:
638
641
  packets.append(self.queue.get_nowait())
639
- except self.queue.Empty:
642
+ except self.queue_empty:
640
643
  break
641
644
  if packets[-1] is None:
642
645
  packets = packets[:-1]
@@ -280,7 +280,12 @@ class WebSocket: # pragma: no cover
280
280
  event = await self.asgi_receive()
281
281
  if event['type'] != 'websocket.receive':
282
282
  raise OSError()
283
- return event.get('bytes') or event.get('text')
283
+ if event.get('bytes', None) is not None:
284
+ return event['bytes']
285
+ elif event.get('text', None) is not None:
286
+ return event['text']
287
+ else: # pragma: no cover
288
+ raise OSError()
284
289
 
285
290
 
286
291
  _async = {
@@ -61,7 +61,8 @@ class BaseClient:
61
61
  self.ws = None
62
62
  self.read_loop_task = None
63
63
  self.write_loop_task = None
64
- self.queue = None
64
+ self.queue = self.create_queue()
65
+ self.queue_empty = self.get_queue_empty_exception()
65
66
  self.state = 'disconnected'
66
67
  self.ssl_verify = ssl_verify
67
68
  self.websocket_extra_options = websocket_extra_options or {}
@@ -156,3 +157,13 @@ class BaseClient:
156
157
  if not self.timestamp_requests:
157
158
  return ''
158
159
  return '&t=' + str(time.time())
160
+
161
+ def create_queue(self, *args, **kwargs): # pragma: no cover
162
+ """Create a queue object."""
163
+ raise NotImplementedError('must be implemented in a subclass')
164
+
165
+ def get_queue_empty_exception(self): # pragma: no cover
166
+ """Return the queue empty exception raised by queues created by the
167
+ ``create_queue()`` method.
168
+ """
169
+ raise NotImplementedError('must be implemented in a subclass')
@@ -91,7 +91,6 @@ class Client(base_client.BaseClient):
91
91
  if not transports:
92
92
  raise ValueError('No valid transports provided')
93
93
  self.transports = transports or valid_transports
94
- self.queue = self.create_queue()
95
94
  return getattr(self, '_connect_' + self.transports[0])(
96
95
  url, headers or {}, engineio_path)
97
96
 
@@ -162,9 +161,13 @@ class Client(base_client.BaseClient):
162
161
 
163
162
  def create_queue(self, *args, **kwargs):
164
163
  """Create a queue object."""
165
- q = queue.Queue(*args, **kwargs)
166
- q.Empty = queue.Empty
167
- return q
164
+ return queue.Queue(*args, **kwargs)
165
+
166
+ def get_queue_empty_exception(self):
167
+ """Return the queue empty exception raised by queues created by the
168
+ ``create_queue()`` method.
169
+ """
170
+ return queue.Empty
168
171
 
169
172
  def create_event(self, *args, **kwargs):
170
173
  """Create an event object."""
@@ -566,7 +569,7 @@ class Client(base_client.BaseClient):
566
569
  packets = None
567
570
  try:
568
571
  packets = [self.queue.get(timeout=timeout)]
569
- except self.queue.Empty:
572
+ except self.queue_empty:
570
573
  self.logger.error('packet queue is empty, aborting')
571
574
  break
572
575
  if packets == [None]:
@@ -576,7 +579,7 @@ class Client(base_client.BaseClient):
576
579
  while True:
577
580
  try:
578
581
  packets.append(self.queue.get(block=False))
579
- except self.queue.Empty:
582
+ except self.queue_empty:
580
583
  break
581
584
  if packets[-1] is None:
582
585
  packets = packets[:-1]
@@ -1,14 +1,14 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-engineio
3
- Version: 4.12.0
3
+ Version: 4.12.2
4
4
  Summary: Engine.IO server and client for Python
5
5
  Author-email: Miguel Grinberg <miguel.grinberg@gmail.com>
6
+ License: MIT
6
7
  Project-URL: Homepage, https://github.com/miguelgrinberg/python-engineio
7
8
  Project-URL: Bug Tracker, https://github.com/miguelgrinberg/python-engineio/issues
8
9
  Classifier: Environment :: Web Environment
9
10
  Classifier: Intended Audience :: Developers
10
11
  Classifier: Programming Language :: Python :: 3
11
- Classifier: License :: OSI Approved :: MIT License
12
12
  Classifier: Operating System :: OS Independent
13
13
  Requires-Python: >=3.6
14
14
  Description-Content-Type: text/markdown
@@ -225,7 +225,7 @@ class TestAsyncClient:
225
225
  async def test_create_queue(self):
226
226
  c = async_client.AsyncClient()
227
227
  q = c.create_queue()
228
- with pytest.raises(q.Empty):
228
+ with pytest.raises(c.queue_empty):
229
229
  q.get_nowait()
230
230
 
231
231
  async def test_create_event(self):
@@ -1200,7 +1200,7 @@ class TestAsyncClient:
1200
1200
  c.ping_interval = 1
1201
1201
  c.ping_timeout = 2
1202
1202
  c.queue = mock.MagicMock()
1203
- c.queue.Empty = RuntimeError
1203
+ c.queue_empty = RuntimeError
1204
1204
  c.queue.get = mock.AsyncMock(side_effect=RuntimeError)
1205
1205
  await c._write_loop()
1206
1206
  c.queue.get.assert_awaited_once_with()
@@ -1213,7 +1213,7 @@ class TestAsyncClient:
1213
1213
  c.ping_timeout = 2
1214
1214
  c.current_transport = 'polling'
1215
1215
  c.queue = mock.MagicMock()
1216
- c.queue.Empty = RuntimeError
1216
+ c.queue_empty = RuntimeError
1217
1217
  c.queue.get = mock.AsyncMock(
1218
1218
  side_effect=[
1219
1219
  packet.Packet(packet.MESSAGE, {'foo': 'bar'}),
@@ -1244,7 +1244,7 @@ class TestAsyncClient:
1244
1244
  c.ping_timeout = 2
1245
1245
  c.current_transport = 'polling'
1246
1246
  c.queue = mock.MagicMock()
1247
- c.queue.Empty = RuntimeError
1247
+ c.queue_empty = RuntimeError
1248
1248
  c.queue.get = mock.AsyncMock(
1249
1249
  side_effect=[
1250
1250
  packet.Packet(packet.MESSAGE, {'foo': 'bar'}),
@@ -1285,7 +1285,7 @@ class TestAsyncClient:
1285
1285
  c.ping_timeout = 2
1286
1286
  c.current_transport = 'polling'
1287
1287
  c.queue = mock.MagicMock()
1288
- c.queue.Empty = RuntimeError
1288
+ c.queue_empty = RuntimeError
1289
1289
  c.queue.get = mock.AsyncMock(
1290
1290
  side_effect=[
1291
1291
  packet.Packet(packet.MESSAGE, {'foo': 'bar'}),
@@ -1322,7 +1322,7 @@ class TestAsyncClient:
1322
1322
  c.ping_timeout = 2
1323
1323
  c.current_transport = 'polling'
1324
1324
  c.queue = mock.MagicMock()
1325
- c.queue.Empty = RuntimeError
1325
+ c.queue_empty = RuntimeError
1326
1326
  c.queue.get = mock.AsyncMock(
1327
1327
  side_effect=[packet.Packet(packet.MESSAGE, {'foo': 'bar'})]
1328
1328
  )
@@ -1350,7 +1350,7 @@ class TestAsyncClient:
1350
1350
  c.ping_timeout = 2
1351
1351
  c.current_transport = 'polling'
1352
1352
  c.queue = mock.MagicMock()
1353
- c.queue.Empty = RuntimeError
1353
+ c.queue_empty = RuntimeError
1354
1354
  c.queue.get = mock.AsyncMock(
1355
1355
  side_effect=[packet.Packet(packet.MESSAGE, {'foo': 'bar'})]
1356
1356
  )
@@ -1379,7 +1379,7 @@ class TestAsyncClient:
1379
1379
  c.ping_timeout = 2
1380
1380
  c.current_transport = 'websocket'
1381
1381
  c.queue = mock.MagicMock()
1382
- c.queue.Empty = RuntimeError
1382
+ c.queue_empty = RuntimeError
1383
1383
  c.queue.get = mock.AsyncMock(
1384
1384
  side_effect=[
1385
1385
  packet.Packet(packet.MESSAGE, {'foo': 'bar'}),
@@ -1401,7 +1401,7 @@ class TestAsyncClient:
1401
1401
  c.ping_timeout = 2
1402
1402
  c.current_transport = 'websocket'
1403
1403
  c.queue = mock.MagicMock()
1404
- c.queue.Empty = RuntimeError
1404
+ c.queue_empty = RuntimeError
1405
1405
  c.queue.get = mock.AsyncMock(
1406
1406
  side_effect=[
1407
1407
  packet.Packet(packet.MESSAGE, {'foo': 'bar'}),
@@ -1431,7 +1431,7 @@ class TestAsyncClient:
1431
1431
  c.ping_timeout = 2
1432
1432
  c.current_transport = 'websocket'
1433
1433
  c.queue = mock.MagicMock()
1434
- c.queue.Empty = RuntimeError
1434
+ c.queue_empty = RuntimeError
1435
1435
  c.queue.get = mock.AsyncMock(
1436
1436
  side_effect=[packet.Packet(packet.MESSAGE, b'foo'), RuntimeError]
1437
1437
  )
@@ -1450,7 +1450,7 @@ class TestAsyncClient:
1450
1450
  c.ping_timeout = 2
1451
1451
  c.current_transport = 'websocket'
1452
1452
  c.queue = mock.MagicMock()
1453
- c.queue.Empty = RuntimeError
1453
+ c.queue_empty = RuntimeError
1454
1454
  c.queue.get = mock.AsyncMock(
1455
1455
  side_effect=[
1456
1456
  packet.Packet(packet.MESSAGE, {'foo': 'bar'}),
@@ -33,10 +33,11 @@ class TestClient:
33
33
  'ws',
34
34
  'read_loop_task',
35
35
  'write_loop_task',
36
- 'queue',
37
36
  ]:
38
37
  assert getattr(c, attr) is None, attr + ' is not None'
39
38
  assert c.state == 'disconnected'
39
+ assert c.queue.__class__.__name__ == 'Queue'
40
+ assert c.queue_empty.__name__ == 'Empty'
40
41
 
41
42
  def test_custom_json(self):
42
43
  client.Client()
@@ -289,7 +290,7 @@ class TestClient:
289
290
  def test_create_queue(self):
290
291
  c = client.Client()
291
292
  q = c.create_queue()
292
- with pytest.raises(q.Empty):
293
+ with pytest.raises(c.queue_empty):
293
294
  q.get(timeout=0.01)
294
295
 
295
296
  def test_create_event(self):
@@ -1499,7 +1500,7 @@ class TestClient:
1499
1500
  c.ping_interval = 1
1500
1501
  c.ping_timeout = 2
1501
1502
  c.queue = mock.MagicMock()
1502
- c.queue.Empty = RuntimeError
1503
+ c.queue_empty = RuntimeError
1503
1504
  c.queue.get.side_effect = RuntimeError
1504
1505
  c._write_loop()
1505
1506
  c.queue.get.assert_called_once_with(timeout=7)
@@ -1512,7 +1513,7 @@ class TestClient:
1512
1513
  c.ping_timeout = 2
1513
1514
  c.current_transport = 'polling'
1514
1515
  c.queue = mock.MagicMock()
1515
- c.queue.Empty = RuntimeError
1516
+ c.queue_empty = RuntimeError
1516
1517
  c.queue.get.side_effect = [
1517
1518
  packet.Packet(packet.MESSAGE, {'foo': 'bar'}),
1518
1519
  RuntimeError,
@@ -1541,7 +1542,7 @@ class TestClient:
1541
1542
  c.ping_timeout = 2
1542
1543
  c.current_transport = 'polling'
1543
1544
  c.queue = mock.MagicMock()
1544
- c.queue.Empty = RuntimeError
1545
+ c.queue_empty = RuntimeError
1545
1546
  c.queue.get.side_effect = [
1546
1547
  packet.Packet(packet.MESSAGE, {'foo': 'bar'}),
1547
1548
  packet.Packet(packet.PING),
@@ -1576,7 +1577,7 @@ class TestClient:
1576
1577
  c.ping_timeout = 2
1577
1578
  c.current_transport = 'polling'
1578
1579
  c.queue = mock.MagicMock()
1579
- c.queue.Empty = RuntimeError
1580
+ c.queue_empty = RuntimeError
1580
1581
  c.queue.get.side_effect = [
1581
1582
  packet.Packet(packet.MESSAGE, {'foo': 'bar'}),
1582
1583
  packet.Packet(packet.PING),
@@ -1610,7 +1611,7 @@ class TestClient:
1610
1611
  c.ping_timeout = 2
1611
1612
  c.current_transport = 'polling'
1612
1613
  c.queue = mock.MagicMock()
1613
- c.queue.Empty = RuntimeError
1614
+ c.queue_empty = RuntimeError
1614
1615
  c.queue.get.side_effect = [
1615
1616
  packet.Packet(packet.MESSAGE, {'foo': 'bar'}),
1616
1617
  RuntimeError,
@@ -1639,7 +1640,7 @@ class TestClient:
1639
1640
  c.ping_timeout = 2
1640
1641
  c.current_transport = 'polling'
1641
1642
  c.queue = mock.MagicMock()
1642
- c.queue.Empty = RuntimeError
1643
+ c.queue_empty = RuntimeError
1643
1644
  c.queue.get.side_effect = [
1644
1645
  packet.Packet(packet.MESSAGE, {'foo': 'bar'}),
1645
1646
  RuntimeError,
@@ -1668,7 +1669,7 @@ class TestClient:
1668
1669
  c.ping_timeout = 2
1669
1670
  c.current_transport = 'websocket'
1670
1671
  c.queue = mock.MagicMock()
1671
- c.queue.Empty = RuntimeError
1672
+ c.queue_empty = RuntimeError
1672
1673
  c.queue.get.side_effect = [
1673
1674
  packet.Packet(packet.MESSAGE, {'foo': 'bar'}),
1674
1675
  RuntimeError,
@@ -1688,7 +1689,7 @@ class TestClient:
1688
1689
  c.ping_timeout = 2
1689
1690
  c.current_transport = 'websocket'
1690
1691
  c.queue = mock.MagicMock()
1691
- c.queue.Empty = RuntimeError
1692
+ c.queue_empty = RuntimeError
1692
1693
  c.queue.get.side_effect = [
1693
1694
  packet.Packet(packet.MESSAGE, {'foo': 'bar'}),
1694
1695
  packet.Packet(packet.PING),
@@ -1712,7 +1713,7 @@ class TestClient:
1712
1713
  c.ping_timeout = 2
1713
1714
  c.current_transport = 'websocket'
1714
1715
  c.queue = mock.MagicMock()
1715
- c.queue.Empty = RuntimeError
1716
+ c.queue_empty = RuntimeError
1716
1717
  c.queue.get.side_effect = [
1717
1718
  packet.Packet(packet.MESSAGE, b'foo'),
1718
1719
  RuntimeError,
@@ -1732,7 +1733,7 @@ class TestClient:
1732
1733
  c.ping_timeout = 2
1733
1734
  c.current_transport = 'websocket'
1734
1735
  c.queue = mock.MagicMock()
1735
- c.queue.Empty = RuntimeError
1736
+ c.queue_empty = RuntimeError
1736
1737
  c.queue.get.side_effect = [
1737
1738
  packet.Packet(packet.MESSAGE, {'foo': 'bar'}),
1738
1739
  RuntimeError,