Skip to content

Commit 5dc2aea

Browse files
keep track of which namespaces failed to connect (#1496)
1 parent b3da354 commit 5dc2aea

File tree

3 files changed

+14
-5
lines changed

3 files changed

+14
-5
lines changed

src/socketio/async_client.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ async def connect(self, url, headers={}, auth=None, transports=None,
139139
namespaces = [namespaces]
140140
self.connection_namespaces = namespaces
141141
self.namespaces = {}
142+
self.failed_namespaces = []
142143
if self._connect_event is None:
143144
self._connect_event = self.eio.create_event()
144145
else:
@@ -166,14 +167,16 @@ async def connect(self, url, headers={}, auth=None, transports=None,
166167
await asyncio.wait_for(self._connect_event.wait(),
167168
wait_timeout)
168169
self._connect_event.clear()
169-
if set(self.namespaces) == set(self.connection_namespaces):
170+
if len(self.namespaces) + len(self.failed_namespaces) == \
171+
len(self.connection_namespaces):
170172
break
171173
except asyncio.TimeoutError:
172174
pass
173175
if set(self.namespaces) != set(self.connection_namespaces):
174176
await self.disconnect()
175177
raise exceptions.ConnectionError(
176-
'One or more namespaces failed to connect')
178+
'One or more namespaces failed to connect'
179+
', '.join(self.failed_namespaces))
177180

178181
self.connected = True
179182

@@ -448,6 +451,7 @@ async def _handle_error(self, namespace, data):
448451
elif not isinstance(data, (tuple, list)):
449452
data = (data,)
450453
await self._trigger_event('connect_error', namespace, *data)
454+
self.failed_namespaces.append(namespace)
451455
self._connect_event.set()
452456
if namespace in self.namespaces:
453457
del self.namespaces[namespace]

src/socketio/base_client.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ def __init__(self, reconnection=True, reconnection_attempts=0,
9393

9494
self.connected = False #: Indicates if the client is connected or not.
9595
self.namespaces = {} #: set of connected namespaces.
96+
self.failed_namespaces = []
9697
self.handlers = {}
9798
self.namespace_handlers = {}
9899
self.callbacks = {}

src/socketio/client.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ def connect(self, url, headers={}, auth=None, transports=None,
137137
namespaces = [namespaces]
138138
self.connection_namespaces = namespaces
139139
self.namespaces = {}
140+
self.failed_namespaces = []
140141
if self._connect_event is None:
141142
self._connect_event = self.eio.create_event()
142143
else:
@@ -161,12 +162,14 @@ def connect(self, url, headers={}, auth=None, transports=None,
161162
if wait:
162163
while self._connect_event.wait(timeout=wait_timeout):
163164
self._connect_event.clear()
164-
if set(self.namespaces) == set(self.connection_namespaces):
165+
if len(self.namespaces) + len(self.failed_namespaces) == \
166+
len(self.connection_namespaces):
165167
break
166168
if set(self.namespaces) != set(self.connection_namespaces):
167169
self.disconnect()
168170
raise exceptions.ConnectionError(
169-
'One or more namespaces failed to connect')
171+
'One or more namespaces failed to connect: '
172+
', '.join(self.failed_namespaces))
170173

171174
self.connected = True
172175

@@ -425,6 +428,7 @@ def _handle_error(self, namespace, data):
425428
elif not isinstance(data, (tuple, list)):
426429
data = (data,)
427430
self._trigger_event('connect_error', namespace, *data)
431+
self.failed_namespaces.append(namespace)
428432
self._connect_event.set()
429433
if namespace in self.namespaces:
430434
del self.namespaces[namespace]
@@ -439,7 +443,7 @@ def _trigger_event(self, event, namespace, *args):
439443
if handler:
440444
try:
441445
return handler(*args)
442-
except TypeError:
446+
except TypeError: # pragma: no cover
443447
# the legacy disconnect event does not take a reason argument
444448
if event == 'disconnect':
445449
return handler(*args[:-1])

0 commit comments

Comments
 (0)