@@ -95,7 +95,7 @@ def __init__(self, reconnection=True, reconnection_attempts=0,
95
95
self .connection_namespaces = None
96
96
self .socketio_path = None
97
97
98
- self .namespaces = None
98
+ self .namespaces = []
99
99
self .handlers = {}
100
100
self .namespace_handlers = {}
101
101
self .callbacks = {}
@@ -245,7 +245,21 @@ def emit(self, event, data=None, namespace=None, callback=None):
245
245
id = self ._generate_ack_id (namespace , callback )
246
246
else :
247
247
id = None
248
- self ._emit_internal (event , data , namespace , id )
248
+ if six .PY2 and not self .binary :
249
+ binary = False # pragma: nocover
250
+ else :
251
+ binary = None
252
+ # tuples are expanded to multiple arguments, everything else is sent
253
+ # as a single argument
254
+ if isinstance (data , tuple ):
255
+ data = list (data )
256
+ elif data is not None :
257
+ data = [data ]
258
+ else :
259
+ data = []
260
+ self ._send_packet (packet .Packet (packet .EVENT , namespace = namespace ,
261
+ data = [event ] + data , id = id ,
262
+ binary = binary ))
249
263
250
264
def send (self , data , namespace = None , callback = None ):
251
265
"""Send a message to one or more connected clients.
@@ -265,7 +279,8 @@ def send(self, data, namespace=None, callback=None):
265
279
by the client. Callback functions can only be used
266
280
when addressing an individual client.
267
281
"""
268
- self .emit ('message' , data , namespace , callback )
282
+ self .emit ('message' , data = data , namespace = namespace ,
283
+ callback = callback )
269
284
270
285
def disconnect (self ):
271
286
"""Disconnect from the server."""
@@ -311,24 +326,6 @@ def sleep(self, seconds=0):
311
326
"""
312
327
return self .eio .sleep (seconds )
313
328
314
- def _emit_internal (self , event , data , namespace = None , id = None ):
315
- """Send a message to a client."""
316
- if six .PY2 and not self .binary :
317
- binary = False # pragma: nocover
318
- else :
319
- binary = None
320
- # tuples are expanded to multiple arguments, everything else is sent
321
- # as a single argument
322
- if isinstance (data , tuple ):
323
- data = list (data )
324
- elif data is not None :
325
- data = [data ]
326
- else :
327
- data = []
328
- self ._send_packet (packet .Packet (packet .EVENT , namespace = namespace ,
329
- data = [event ] + data , id = id ,
330
- binary = binary ))
331
-
332
329
def _send_packet (self , pkt ):
333
330
"""Send a Socket.IO packet to the server."""
334
331
encoded_packet = pkt .encode ()
@@ -356,6 +353,8 @@ def _handle_connect(self, namespace):
356
353
if namespace == '/' :
357
354
for n in self .namespaces :
358
355
self ._send_packet (packet .Packet (packet .CONNECT , namespace = n ))
356
+ elif namespace not in self .namespaces :
357
+ self .namespaces .append (namespace )
359
358
360
359
def _handle_disconnect (self , namespace ):
361
360
namespace = namespace or '/'
@@ -366,9 +365,6 @@ def _handle_disconnect(self, namespace):
366
365
def _handle_event (self , namespace , id , data ):
367
366
namespace = namespace or '/'
368
367
self .logger .info ('Received event "%s" [%s]' , data [0 ], namespace )
369
- self ._handle_event_internal (data , namespace , id )
370
-
371
- def _handle_event_internal (self , data , namespace , id ):
372
368
r = self ._trigger_event (data [0 ], namespace , * data [1 :])
373
369
if id is not None :
374
370
# send ACK packet with the response returned by the handler
@@ -400,7 +396,7 @@ def _handle_ack(self, namespace, id, data):
400
396
if callback is not None :
401
397
callback (* data )
402
398
403
- def _handle_error (self , namespace , data ):
399
+ def _handle_error (self , namespace ):
404
400
namespace = namespace or '/'
405
401
self .logger .info ('Connection to namespace {} was rejected' .format (
406
402
namespace ))
@@ -413,7 +409,7 @@ def _trigger_event(self, event, namespace, *args):
413
409
if namespace in self .handlers and event in self .handlers [namespace ]:
414
410
return self .handlers [namespace ][event ](* args )
415
411
416
- # or else, forward the event to a namepsace handler if one exists
412
+ # or else, forward the event to a namespace handler if one exists
417
413
elif namespace in self .namespace_handlers :
418
414
return self .namespace_handlers [namespace ].trigger_event (
419
415
event , * args )
@@ -449,7 +445,7 @@ def _handle_reconnect(self):
449
445
'Maximum reconnection attempts reached, giving up' )
450
446
break
451
447
452
- def _handle_eio_connect (self ):
448
+ def _handle_eio_connect (self ): # pragma: no cover
453
449
"""Handle the Engine.IO connection event."""
454
450
self .logger .info ('Engine.IO connection established' )
455
451
@@ -477,7 +473,7 @@ def _handle_eio_message(self, data):
477
473
pkt .packet_type == packet .BINARY_ACK :
478
474
self ._binary_packet = pkt
479
475
elif pkt .packet_type == packet .ERROR :
480
- self ._handle_error (pkt .namespace , pkt . data )
476
+ self ._handle_error (pkt .namespace )
481
477
else :
482
478
raise ValueError ('Unknown packet type.' )
483
479
0 commit comments