Skip to content

Commit f4ebcc7

Browse files
Handle events with catch-all namespace (Fixes #2061)
1 parent 279bba4 commit f4ebcc7

File tree

2 files changed

+22
-1
lines changed

2 files changed

+22
-1
lines changed

src/flask_socketio/__init__.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,13 @@ def handle_my_custom_event(json):
279279
def decorator(handler):
280280
@wraps(handler)
281281
def _handler(sid, *args):
282-
return self._handle_event(handler, message, namespace, sid,
282+
nonlocal namespace
283+
real_ns = namespace
284+
if namespace == '*':
285+
real_ns = sid
286+
sid = args[0]
287+
args = args[1:]
288+
return self._handle_event(handler, message, real_ns, sid,
283289
*args)
284290

285291
if self.server:

test_socketio.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,11 @@ def on_changing_response():
182182
return data
183183

184184

185+
@socketio.on('wildcard', namespace='*')
186+
def wildcard(data):
187+
emit('my custom response', data)
188+
189+
185190
@socketio.on_error()
186191
def error_handler(value):
187192
if isinstance(value, AssertionError):
@@ -416,6 +421,16 @@ def test_send_json_namespace(self):
416421
self.assertEqual(len(received), 1)
417422
self.assertEqual(received[0]['args']['a'], 'b')
418423

424+
def test_send_catch_all_namespace(self):
425+
client = socketio.test_client(app, namespace='/test')
426+
client.get_received('/test')
427+
client.emit('wildcard', {'a': 'b'}, namespace='/test')
428+
received = client.get_received('/test')
429+
self.assertEqual(len(received), 1)
430+
self.assertEqual(len(received[0]['args']), 1)
431+
self.assertEqual(received[0]['name'], 'my custom response')
432+
self.assertEqual(received[0]['args'][0]['a'], 'b')
433+
419434
def test_emit(self):
420435
client = socketio.test_client(app, auth={'foo': 'bar'})
421436
client.get_received()

0 commit comments

Comments
 (0)