Skip to content

Commit bd39b8f

Browse files
authored
Improved routing to catch-all namespace handlers (#1316)
1 parent fff4640 commit bd39b8f

File tree

2 files changed

+11
-2
lines changed

2 files changed

+11
-2
lines changed

src/socketio/base_server.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ def _get_event_handler(self, event, namespace, args):
226226
'*' in self.handlers[namespace]:
227227
handler = self.handlers[namespace]['*']
228228
args = (event, *args)
229-
elif '*' in self.handlers:
229+
if handler is None and '*' in self.handlers:
230230
if event in self.handlers['*']:
231231
handler = self.handlers['*'][event]
232232
args = (namespace, *args)
@@ -245,7 +245,7 @@ def _get_namespace_handler(self, namespace, args):
245245
handler = None
246246
if namespace in self.namespace_handlers:
247247
handler = self.namespace_handlers[namespace]
248-
elif '*' in self.namespace_handlers:
248+
if handler is None and '*' in self.namespace_handlers:
249249
handler = self.namespace_handlers['*']
250250
args = (namespace, *args)
251251
return handler, args

tests/common/test_server.py

+9
Original file line numberDiff line numberDiff line change
@@ -578,16 +578,20 @@ def test_handle_event_with_catchall_namespace(self, eio):
578578
s = server.Server(async_handlers=False)
579579
sid_foo = s.manager.connect('123', '/foo')
580580
sid_bar = s.manager.connect('123', '/bar')
581+
sid_baz = s.manager.connect('123', '/baz')
581582
connect_star_handler = mock.MagicMock()
582583
msg_foo_handler = mock.MagicMock()
583584
msg_star_handler = mock.MagicMock()
584585
star_foo_handler = mock.MagicMock()
585586
star_star_handler = mock.MagicMock()
587+
my_message_baz_handler = mock.MagicMock()
586588
s.on('connect', connect_star_handler, namespace='*')
587589
s.on('msg', msg_foo_handler, namespace='/foo')
588590
s.on('msg', msg_star_handler, namespace='*')
589591
s.on('*', star_foo_handler, namespace='/foo')
590592
s.on('*', star_star_handler, namespace='*')
593+
s.on('my message', my_message_baz_handler, namespace='/baz')
594+
591595
s._trigger_event('connect', '/bar', sid_bar)
592596
s._handle_eio_message('123', '2/foo,["msg","a","b"]')
593597
s._handle_eio_message('123', '2/bar,["msg","a","b"]')
@@ -602,6 +606,11 @@ def test_handle_event_with_catchall_namespace(self, eio):
602606
star_star_handler.assert_called_once_with(
603607
'my message', '/bar', sid_bar, 'a', 'b', 'c')
604608

609+
s._handle_eio_message('123', '2/baz,["my message","a","b","c"]')
610+
s._handle_eio_message('123', '2/baz,["msg","a","b"]')
611+
my_message_baz_handler.assert_called_once_with(sid_baz, 'a', 'b', 'c')
612+
msg_star_handler.assert_called_with('/baz', sid_baz, 'a', 'b')
613+
605614
def test_handle_event_with_disconnected_namespace(self, eio):
606615
s = server.Server(async_handlers=False)
607616
s.manager.connect('123', '/foo')

0 commit comments

Comments
 (0)