python-engineio 4.12.1__py3-none-any.whl → 4.12.3__py3-none-any.whl

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.
engineio/async_client.py CHANGED
@@ -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."""
@@ -211,6 +214,12 @@ class AsyncClient(base_client.BaseClient):
211
214
 
212
215
  async def _reset(self):
213
216
  super()._reset()
217
+ while True: # pragma: no cover
218
+ try:
219
+ self.queue.get_nowait()
220
+ self.queue.task_done()
221
+ except self.queue_empty:
222
+ break
214
223
  if not self.external_http: # pragma: no cover
215
224
  if self.http and not self.http.closed:
216
225
  await self.http.close()
@@ -624,7 +633,7 @@ class AsyncClient(base_client.BaseClient):
624
633
  packets = None
625
634
  try:
626
635
  packets = [await asyncio.wait_for(self.queue.get(), timeout)]
627
- except (self.queue.Empty, asyncio.TimeoutError):
636
+ except (self.queue_empty, asyncio.TimeoutError):
628
637
  self.logger.error('packet queue is empty, aborting')
629
638
  break
630
639
  except asyncio.CancelledError: # pragma: no cover
@@ -636,7 +645,7 @@ class AsyncClient(base_client.BaseClient):
636
645
  while True:
637
646
  try:
638
647
  packets.append(self.queue.get_nowait())
639
- except self.queue.Empty:
648
+ except self.queue_empty:
640
649
  break
641
650
  if packets[-1] is None:
642
651
  packets = packets[:-1]
@@ -280,9 +280,9 @@ class WebSocket: # pragma: no cover
280
280
  event = await self.asgi_receive()
281
281
  if event['type'] != 'websocket.receive':
282
282
  raise OSError()
283
- if 'bytes' in event:
283
+ if event.get('bytes', None) is not None:
284
284
  return event['bytes']
285
- elif 'text' in event:
285
+ elif event.get('text', None) is not None:
286
286
  return event['text']
287
287
  else: # pragma: no cover
288
288
  raise OSError()
engineio/async_server.py CHANGED
@@ -56,8 +56,8 @@ class AsyncServer(base_server.BaseServer):
56
56
  :param cors_allowed_origins: Origin or list of origins that are allowed to
57
57
  connect to this server. Only the same origin
58
58
  is allowed by default. Set this argument to
59
- ``'*'`` to allow all origins, or to ``[]`` to
60
- disable CORS handling.
59
+ ``'*'`` or ``['*']`` to allow all origins, or
60
+ to ``[]`` to disable CORS handling.
61
61
  :param cors_credentials: Whether credentials (cookies, authentication) are
62
62
  allowed in requests to this server.
63
63
  :param logger: To enable logging set to ``True`` or pass a logger object to
engineio/base_client.py CHANGED
@@ -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')
engineio/base_server.py CHANGED
@@ -310,7 +310,10 @@ class BaseServer:
310
310
  is_allowed = self.cors_allowed_origins(origin)
311
311
  allowed_origins = [origin] if is_allowed else []
312
312
  else:
313
- allowed_origins = self.cors_allowed_origins
313
+ if '*' in self.cors_allowed_origins:
314
+ allowed_origins = None
315
+ else:
316
+ allowed_origins = self.cors_allowed_origins
314
317
  return allowed_origins
315
318
 
316
319
  def _cors_headers(self, environ):
engineio/client.py CHANGED
@@ -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,14 +161,27 @@ 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."""
171
174
  return threading.Event(*args, **kwargs)
172
175
 
176
+ def _reset(self):
177
+ super()._reset()
178
+ while True: # pragma: no cover
179
+ try:
180
+ self.queue.get_nowait()
181
+ self.queue.task_done()
182
+ except self.queue_empty:
183
+ break
184
+
173
185
  def _connect_polling(self, url, headers, engineio_path):
174
186
  """Establish a long-polling connection to the Engine.IO server."""
175
187
  if requests is None: # pragma: no cover
@@ -566,7 +578,7 @@ class Client(base_client.BaseClient):
566
578
  packets = None
567
579
  try:
568
580
  packets = [self.queue.get(timeout=timeout)]
569
- except self.queue.Empty:
581
+ except self.queue_empty:
570
582
  self.logger.error('packet queue is empty, aborting')
571
583
  break
572
584
  if packets == [None]:
@@ -576,7 +588,7 @@ class Client(base_client.BaseClient):
576
588
  while True:
577
589
  try:
578
590
  packets.append(self.queue.get(block=False))
579
- except self.queue.Empty:
591
+ except self.queue_empty:
580
592
  break
581
593
  if packets[-1] is None:
582
594
  packets = packets[:-1]
engineio/server.py CHANGED
@@ -54,8 +54,8 @@ class Server(base_server.BaseServer):
54
54
  :param cors_allowed_origins: Origin or list of origins that are allowed to
55
55
  connect to this server. Only the same origin
56
56
  is allowed by default. Set this argument to
57
- ``'*'`` to allow all origins, or to ``[]`` to
58
- disable CORS handling.
57
+ ``'*'`` or ``['*']`` to allow all origins, or
58
+ to ``[]`` to disable CORS handling.
59
59
  :param cors_credentials: Whether credentials (cookies, authentication) are
60
60
  allowed in requests to this server. The default
61
61
  is ``True``.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-engineio
3
- Version: 4.12.1
3
+ Version: 4.12.3
4
4
  Summary: Engine.IO server and client for Python
5
5
  Author-email: Miguel Grinberg <miguel.grinberg@gmail.com>
6
6
  License: MIT
@@ -1,31 +1,31 @@
1
1
  engineio/__init__.py,sha256=0R2PY1EXu3sicP7mkA0_QxEVGRlFlgvsxfhByqREE1A,481
2
- engineio/async_client.py,sha256=ZrK9j_sUNKRwjqeT6W26d1TtjoGAp2nULhIbX_1iivs,29446
3
- engineio/async_server.py,sha256=8Af_uwf8mKOCJGqVKa3QN0kz7_B2K1cdpSmsvkAoBR4,27412
2
+ engineio/async_client.py,sha256=EW06yaSq05c6TteBxeFfMZQF8v6jQ_MMZoqqzjiU0hM,29780
3
+ engineio/async_server.py,sha256=skPqa2vMOrnC_Tavl5J--r8GSlnQw4camVNnJ52v6N8,27425
4
4
  engineio/async_socket.py,sha256=nHY0DPPk0FtI9djUnQWtzZ3ce2OD184Tu-Dop7JLg9I,10715
5
- engineio/base_client.py,sha256=uEI6OglvhdIGD1DAZuptbn0KXQMk_o3w0AH4wJvPwZ0,5322
6
- engineio/base_server.py,sha256=S_O5ZWSzdKn4CBC3UjrhZ_Oarw35ge3Gmg5M3CV5C9k,14653
5
+ engineio/base_client.py,sha256=oOdq-zR7kg8QpvAGti0zBIiFBQGyEELwVMZNtcoJ2ig,5827
6
+ engineio/base_server.py,sha256=tTCqc65Vzf-0Be1uunt1FuGxPOvcpOUCxnT5V2mZCWo,14763
7
7
  engineio/base_socket.py,sha256=sQqbNSfGhMQG3xzwar6IXMal28C7Q5TIAQRGp74Wt2o,399
8
- engineio/client.py,sha256=wfgB_MrpEh-v4dBt6W2eW6i0CRNEP0CIJ6d4Ap4CnZE,27227
8
+ engineio/client.py,sha256=5CzbWX-ghMByOhXVjzAeBaN8h1yW-TL5mbBVzf-Ywpc,27577
9
9
  engineio/exceptions.py,sha256=FyuMb5qhX9CUYP3fEoe1m-faU96ApdQTSbblaaoo8LA,292
10
10
  engineio/json.py,sha256=SG5FTojqd1ix6u0dKXJsZVqqdYioZLO4S2GPL7BKl3U,405
11
11
  engineio/middleware.py,sha256=5NKBXz-ftuFErUB_V9IDvRHaSOsjhtW-NnuJtquB1nc,3750
12
12
  engineio/packet.py,sha256=YO3gmeKUoKyIsUq2e1z7Zifr5PGeS3gnaCeqR7wj5hQ,3198
13
13
  engineio/payload.py,sha256=GIWu0Vnay4WNZlDxHqVgP34tKTBXX58OArJ-mO5zD3E,1539
14
- engineio/server.py,sha256=4_xdtH0tyusigQurwOeDFrHtodthFTOIbOVZ-_ckh5U,22957
14
+ engineio/server.py,sha256=NTXGILAY6JbO1luITR43QsTPrT3gFR_3bScOmfPV6Uc,22970
15
15
  engineio/socket.py,sha256=Oaw1E7ZDyOCaS7KV151g1u9rqOf1JJHh5gttEU0cSeA,10342
16
16
  engineio/static_files.py,sha256=pwez9LQFaSQXMbtI0vLyD6UDiokQ4rNfmRYgVLKOthc,2064
17
17
  engineio/async_drivers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
18
  engineio/async_drivers/_websocket_wsgi.py,sha256=LuOEfKhbAw8SplB5PMpYKIUqfCPEadQEpqeiq_leOIA,949
19
19
  engineio/async_drivers/aiohttp.py,sha256=OBDGhaNXWHxQkwhzZT2vlTAOqWReGS6Sjk9u3BEh_Mc,3754
20
- engineio/async_drivers/asgi.py,sha256=v0FlBQT6iHmrhlDbVAM5ZjLni22utLiV0f5XyDeTlzY,11343
20
+ engineio/async_drivers/asgi.py,sha256=WtgJI4ZRbWmS0G6lqtyxA35FWJfs5cDRvXspRzG5xsI,11383
21
21
  engineio/async_drivers/eventlet.py,sha256=n1y4OjPdj4J2GIep5N56O29oa5NQgFJVcTBjyO1C-Gs,1735
22
22
  engineio/async_drivers/gevent.py,sha256=hnJHeWdDQE2jfoLCP5DnwVPzsQlcTLJUMA5EVf1UL-k,2962
23
23
  engineio/async_drivers/gevent_uwsgi.py,sha256=m6ay5dov9FDQl0fbeiKeE-Orh5LiF6zLlYQ64Oa3T5g,5954
24
24
  engineio/async_drivers/sanic.py,sha256=GYX8YWR1GbRm-GkMTAQkfkWbY12MOT1IV2DzH0Xx8Ns,4495
25
25
  engineio/async_drivers/threading.py,sha256=ywmG59d4H6OHZjKarBN97-9BHEsRxFEz9YN-E9QAu_I,463
26
26
  engineio/async_drivers/tornado.py,sha256=mbVHs1mECfzFSNv33uigkpTBtNPT0u49k5zaybewdIo,5893
27
- python_engineio-4.12.1.dist-info/licenses/LICENSE,sha256=yel9Pbwfu82094CLKCzWRtuIev9PUxP-a76NTDFAWpw,1082
28
- python_engineio-4.12.1.dist-info/METADATA,sha256=wiaRuG1XGttR3GGc2Xm7hP9opjQC-PRAANPplk3gq3c,2221
29
- python_engineio-4.12.1.dist-info/WHEEL,sha256=DnLRTWE75wApRYVsjgc6wsVswC54sMSJhAEd4xhDpBk,91
30
- python_engineio-4.12.1.dist-info/top_level.txt,sha256=u8PmNisCZLwRYcWrNLe9wutQ2tt4zNi8IH362c-HWuA,9
31
- python_engineio-4.12.1.dist-info/RECORD,,
27
+ python_engineio-4.12.3.dist-info/licenses/LICENSE,sha256=yel9Pbwfu82094CLKCzWRtuIev9PUxP-a76NTDFAWpw,1082
28
+ python_engineio-4.12.3.dist-info/METADATA,sha256=QNSOyyDMFyuGJzIcbqZ6BPKnl7PoyrfjbDtbxlrjcHI,2221
29
+ python_engineio-4.12.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
30
+ python_engineio-4.12.3.dist-info/top_level.txt,sha256=u8PmNisCZLwRYcWrNLe9wutQ2tt4zNi8IH362c-HWuA,9
31
+ python_engineio-4.12.3.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.4.0)
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5