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 +16 -7
- engineio/async_drivers/asgi.py +2 -2
- engineio/async_server.py +2 -2
- engineio/base_client.py +12 -1
- engineio/base_server.py +4 -1
- engineio/client.py +18 -6
- engineio/server.py +2 -2
- {python_engineio-4.12.1.dist-info → python_engineio-4.12.3.dist-info}/METADATA +1 -1
- {python_engineio-4.12.1.dist-info → python_engineio-4.12.3.dist-info}/RECORD +12 -12
- {python_engineio-4.12.1.dist-info → python_engineio-4.12.3.dist-info}/WHEEL +1 -1
- {python_engineio-4.12.1.dist-info → python_engineio-4.12.3.dist-info}/licenses/LICENSE +0 -0
- {python_engineio-4.12.1.dist-info → python_engineio-4.12.3.dist-info}/top_level.txt +0 -0
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
|
-
|
|
205
|
-
|
|
206
|
-
|
|
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.
|
|
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.
|
|
648
|
+
except self.queue_empty:
|
|
640
649
|
break
|
|
641
650
|
if packets[-1] is None:
|
|
642
651
|
packets = packets[:-1]
|
engineio/async_drivers/asgi.py
CHANGED
|
@@ -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'
|
|
283
|
+
if event.get('bytes', None) is not None:
|
|
284
284
|
return event['bytes']
|
|
285
|
-
elif 'text'
|
|
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
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
166
|
-
|
|
167
|
-
|
|
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.
|
|
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.
|
|
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
|
|
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,31 +1,31 @@
|
|
|
1
1
|
engineio/__init__.py,sha256=0R2PY1EXu3sicP7mkA0_QxEVGRlFlgvsxfhByqREE1A,481
|
|
2
|
-
engineio/async_client.py,sha256=
|
|
3
|
-
engineio/async_server.py,sha256=
|
|
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=
|
|
6
|
-
engineio/base_server.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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.
|
|
28
|
-
python_engineio-4.12.
|
|
29
|
-
python_engineio-4.12.
|
|
30
|
-
python_engineio-4.12.
|
|
31
|
-
python_engineio-4.12.
|
|
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,,
|
|
File without changes
|
|
File without changes
|