From 260835b0c4b77695449a6bdc0632c5a7c75aba9a Mon Sep 17 00:00:00 2001 From: Eugnee <77396838+Eugnee@users.noreply.github.com> Date: Tue, 22 Jul 2025 16:23:53 +0500 Subject: [PATCH 1/2] Bugfix: self.channel not initialised _redis_connect expects self.channel to be initialised, otherwise getting exception "object has no attribute 'channel'" at line 70 --- src/socketio/async_redis_manager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/socketio/async_redis_manager.py b/src/socketio/async_redis_manager.py index cc82f4a5..6f248c23 100644 --- a/src/socketio/async_redis_manager.py +++ b/src/socketio/async_redis_manager.py @@ -54,8 +54,8 @@ def __init__(self, url='redis://localhost:6379/0', channel='socketio', raise RuntimeError('Version 2 of aioredis package is required.') self.redis_url = url self.redis_options = redis_options or {} - self._redis_connect() super().__init__(channel=channel, write_only=write_only, logger=logger) + self._redis_connect() def _redis_connect(self): if not self.redis_url.startswith('redis+sentinel://'): From bddd8e3c0af17bfdb6e194670091e3b0cc788924 Mon Sep 17 00:00:00 2001 From: Miguel Grinberg Date: Tue, 22 Jul 2025 18:24:34 +0100 Subject: [PATCH 2/2] apply similar fix to other client managers --- src/socketio/async_aiopika_manager.py | 2 +- src/socketio/async_redis_manager.py | 2 +- src/socketio/redis_manager.py | 2 +- src/socketio/zmq_manager.py | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/socketio/async_aiopika_manager.py b/src/socketio/async_aiopika_manager.py index b6f09b8b..003b67bc 100644 --- a/src/socketio/async_aiopika_manager.py +++ b/src/socketio/async_aiopika_manager.py @@ -43,12 +43,12 @@ def __init__(self, url='amqp://guest:guest@localhost:5672//', raise RuntimeError('aio_pika package is not installed ' '(Run "pip install aio_pika" in your ' 'virtualenv).') + super().__init__(channel=channel, write_only=write_only, logger=logger) self.url = url self._lock = asyncio.Lock() self.publisher_connection = None self.publisher_channel = None self.publisher_exchange = None - super().__init__(channel=channel, write_only=write_only, logger=logger) async def _connection(self): return await aio_pika.connect_robust(self.url) diff --git a/src/socketio/async_redis_manager.py b/src/socketio/async_redis_manager.py index 6f248c23..92109a21 100644 --- a/src/socketio/async_redis_manager.py +++ b/src/socketio/async_redis_manager.py @@ -52,9 +52,9 @@ def __init__(self, url='redis://localhost:6379/0', channel='socketio', '(Run "pip install redis" in your virtualenv).') if not hasattr(aioredis.Redis, 'from_url'): raise RuntimeError('Version 2 of aioredis package is required.') + super().__init__(channel=channel, write_only=write_only, logger=logger) self.redis_url = url self.redis_options = redis_options or {} - super().__init__(channel=channel, write_only=write_only, logger=logger) self._redis_connect() def _redis_connect(self): diff --git a/src/socketio/redis_manager.py b/src/socketio/redis_manager.py index df98618c..c4407dfe 100644 --- a/src/socketio/redis_manager.py +++ b/src/socketio/redis_manager.py @@ -75,10 +75,10 @@ def __init__(self, url='redis://localhost:6379/0', channel='socketio', raise RuntimeError('Redis package is not installed ' '(Run "pip install redis" in your ' 'virtualenv).') + super().__init__(channel=channel, write_only=write_only, logger=logger) self.redis_url = url self.redis_options = redis_options or {} self._redis_connect() - super().__init__(channel=channel, write_only=write_only, logger=logger) def initialize(self): super().initialize() diff --git a/src/socketio/zmq_manager.py b/src/socketio/zmq_manager.py index 468dc268..aa5a49a2 100644 --- a/src/socketio/zmq_manager.py +++ b/src/socketio/zmq_manager.py @@ -57,6 +57,7 @@ def __init__(self, url='zmq+tcp://localhost:5555+5556', if not (url.startswith('zmq+tcp://') and r.search(url)): raise RuntimeError('unexpected connection string: ' + url) + super().__init__(channel=channel, write_only=write_only, logger=logger) url = url.replace('zmq+', '') (sink_url, sub_port) = url.split('+') sink_port = sink_url.split(':')[-1] @@ -72,7 +73,6 @@ def __init__(self, url='zmq+tcp://localhost:5555+5556', self.sink = sink self.sub = sub self.channel = channel - super().__init__(channel=channel, write_only=write_only, logger=logger) def _publish(self, data): pickled_data = pickle.dumps(