Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-python-socketio for openSUSE:Factory checked in at 2022-10-31 13:04:30
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-python-socketio (Old)
and /work/SRC/openSUSE:Factory/.python-python-socketio.new.2275 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-python-socketio"
Mon Oct 31 13:04:30 2022 rev:7 rq:1032441 version:5.7.2
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-python-socketio/python-python-socketio.changes 2022-10-08 01:25:43.966299531 +0200
+++ /work/SRC/openSUSE:Factory/.python-python-socketio.new.2275/python-python-socketio.changes 2022-10-31 13:04:32.589758515 +0100
@@ -1,0 +2,9 @@
+Fri Oct 28 20:49:21 UTC 2022 - Yogalakshmi Arunachalam
+
+- Update to 5.7.2
+ * Fixed disconnect implementation when using a message queue #1002 (commit)
+ * Fixed remote async disconnects via message queue #1003 (commit)
+ * Support optional payloads in msgpack implementation #981 (commit) (thanks Cromfel!)
+ * Recommend ASGI integration for Sanic in Documentation (commit)
+
+-------------------------------------------------------------------
Old:
----
python-socketio-5.7.1.tar.gz
New:
----
python-socketio-5.7.2.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-python-socketio.spec ++++++
--- /var/tmp/diff_new_pack.zlWGGv/_old 2022-10-31 13:04:33.113761185 +0100
+++ /var/tmp/diff_new_pack.zlWGGv/_new 2022-10-31 13:04:33.117761205 +0100
@@ -19,7 +19,7 @@
%{?!python_module:%define python_module() python3-%{**}}
%define skip_python2 1
Name: python-python-socketio
-Version: 5.7.1
+Version: 5.7.2
Release: 0
Summary: SocketIO server
License: MIT
++++++ python-socketio-5.7.1.tar.gz -> python-socketio-5.7.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-socketio-5.7.1/CHANGES.md new/python-socketio-5.7.2/CHANGES.md
--- old/python-socketio-5.7.1/CHANGES.md 2022-07-15 21:05:00.000000000 +0200
+++ new/python-socketio-5.7.2/CHANGES.md 2022-10-17 11:12:27.000000000 +0200
@@ -1,5 +1,12 @@
# python-socketio change log
+**Release 5.7.2** - 2022-10-17
+
+- Fixed disconnect implementation when using a message queue [#1002](https://github.com/miguelgrinberg/python-socketio/issues/1002) ([commit](https://github.com/miguelgrinberg/python-socketio/commit/f56ef6f0401b273107f...))
+- Fixed remote async disconnects via message queue [#1003](https://github.com/miguelgrinberg/python-socketio/issues/1003) ([commit](https://github.com/miguelgrinberg/python-socketio/commit/104d6569a0480ed0adb...))
+- Support optional payloads in msgpack implementation [#981](https://github.com/miguelgrinberg/python-socketio/issues/981) ([commit](https://github.com/miguelgrinberg/python-socketio/commit/ce1afd79e69e35b81a6...)) (thanks **Cromfel**!)
+- Recommend ASGI integration for Sanic in Documentation ([commit](https://github.com/miguelgrinberg/python-socketio/commit/2c3e360ae8b151bc0bf...))
+
**Release 5.7.1** - 2022-07-15
- Add `namespaces` argument to `Server` and `AsyncServer` [#822](https://github.com/miguelgrinberg/python-socketio/issues/822) ([commit](https://github.com/miguelgrinberg/python-socketio/commit/efe87d867a205493654...))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-socketio-5.7.1/docs/server.rst new/python-socketio-5.7.2/docs/server.rst
--- old/python-socketio-5.7.1/docs/server.rst 2022-07-15 21:05:00.000000000 +0200
+++ new/python-socketio-5.7.2/docs/server.rst 2022-10-17 11:12:27.000000000 +0200
@@ -628,6 +628,25 @@
The following sections describe a variety of deployment strategies for
Socket.IO servers.
+Uvicorn, Daphne, and other ASGI servers
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The ``socketio.ASGIApp`` class is an ASGI compatible application that can
+forward Socket.IO traffic to an ``socketio.AsyncServer`` instance::
+
+ sio = socketio.AsyncServer(async_mode='asgi')
+ app = socketio.ASGIApp(sio)
+
+If desired, the ``socketio.ASGIApp`` class can forward any traffic that is not
+Socket.IO to another ASGI application, making it possible to deploy a standard
+ASGI web application and the Socket.IO server as a bundle::
+
+ sio = socketio.AsyncServer(async_mode='asgi')
+ app = socketio.ASGIApp(sio, other_app)
+
+The ``ASGIApp`` instance is a fully complaint ASGI instance that can be
+deployed with an ASGI compatible web server.
+
Aiohttp
~~~~~~~
@@ -691,6 +710,10 @@
Sanic
~~~~~
+Note: Due to some backward incompatible changes introduced in recent versions
+of Sanic, it is currently recommended that a Sanic application is deployed with
+the ASGI integration instead.
+
`Sanic http://sanic.readthedocs.io/`_ is a very efficient asynchronous web
server for Python 3.5 and newer.
@@ -726,17 +749,6 @@
app.config['CORS_SUPPORTS_CREDENTIALS'] = True
-Uvicorn, Daphne, and other ASGI servers
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-The ``socketio.ASGIApp`` class is an ASGI compatible application that can
-forward Socket.IO traffic to an ``socketio.AsyncServer`` instance::
-
- sio = socketio.AsyncServer(async_mode='asgi')
- app = socketio.ASGIApp(sio)
-
-The application can then be deployed with any ASGI compatible web server.
-
Eventlet
~~~~~~~~
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-socketio-5.7.1/setup.cfg new/python-socketio-5.7.2/setup.cfg
--- old/python-socketio-5.7.1/setup.cfg 2022-07-15 21:05:00.000000000 +0200
+++ new/python-socketio-5.7.2/setup.cfg 2022-10-17 11:12:27.000000000 +0200
@@ -1,6 +1,6 @@
[metadata]
name = python-socketio
-version = 5.7.1
+version = 5.7.2
author = Miguel Grinberg
author_email = miguel.grinberg@gmail.com
description = Socket.IO server and client for Python
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-socketio-5.7.1/src/socketio/asyncio_manager.py new/python-socketio-5.7.2/src/socketio/asyncio_manager.py
--- old/python-socketio-5.7.1/src/socketio/asyncio_manager.py 2022-07-15 21:05:00.000000000 +0200
+++ new/python-socketio-5.7.2/src/socketio/asyncio_manager.py 2022-10-17 11:12:27.000000000 +0200
@@ -33,6 +33,13 @@
return
await asyncio.wait(tasks)
+ async def disconnect(self, sid, namespace, **kwargs):
+ """Disconnect a client.
+
+ Note: this method is a coroutine.
+ """
+ return super().disconnect(sid, namespace, **kwargs)
+
async def close_room(self, room, namespace):
"""Remove all participants from a room.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-socketio-5.7.1/src/socketio/asyncio_pubsub_manager.py new/python-socketio-5.7.2/src/socketio/asyncio_pubsub_manager.py
--- old/python-socketio-5.7.1/src/socketio/asyncio_pubsub_manager.py 2022-07-15 21:05:00.000000000 +0200
+++ new/python-socketio-5.7.2/src/socketio/asyncio_pubsub_manager.py 2022-10-17 11:12:27.000000000 +0200
@@ -76,7 +76,14 @@
else:
# client is in another server, so we post request to the queue
await self._publish({'method': 'disconnect', 'sid': sid,
- 'namespace': namespace or '/'})
+ 'namespace': namespace or '/'})
+
+ async def disconnect(self, sid, namespace, **kwargs):
+ if kwargs.get('ignore_queue'):
+ return await super(AsyncPubSubManager, self).disconnect(
+ sid, namespace=namespace)
+ await self._publish({'method': 'disconnect', 'sid': sid,
+ 'namespace': namespace or '/'})
async def close_room(self, room, namespace=None):
await self._publish({'method': 'close_room', 'room': room,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-socketio-5.7.1/src/socketio/asyncio_server.py new/python-socketio-5.7.2/src/socketio/asyncio_server.py
--- old/python-socketio-5.7.1/src/socketio/asyncio_server.py 2022-07-15 21:05:00.000000000 +0200
+++ new/python-socketio-5.7.2/src/socketio/asyncio_server.py 2022-10-17 11:12:27.000000000 +0200
@@ -384,7 +384,8 @@
await self._send_packet(eio_sid, self.packet_class(
packet.DISCONNECT, namespace=namespace))
await self._trigger_event('disconnect', namespace, sid)
- self.manager.disconnect(sid, namespace=namespace)
+ await self.manager.disconnect(sid, namespace=namespace,
+ ignore_queue=True)
async def handle_request(self, *args, **kwargs):
"""Handle an HTTP request from the client.
@@ -486,7 +487,7 @@
await self._send_packet(eio_sid, self.packet_class(
packet.CONNECT_ERROR, data=fail_reason,
namespace=namespace))
- self.manager.disconnect(sid, namespace)
+ await self.manager.disconnect(sid, namespace, ignore_queue=True)
elif not self.always_connect:
await self._send_packet(eio_sid, self.packet_class(
packet.CONNECT, {'sid': sid}, namespace=namespace))
@@ -499,7 +500,7 @@
return
self.manager.pre_disconnect(sid, namespace=namespace)
await self._trigger_event('disconnect', namespace, sid)
- self.manager.disconnect(sid, namespace)
+ await self.manager.disconnect(sid, namespace, ignore_queue=True)
async def _handle_event(self, eio_sid, namespace, id, data):
"""Handle an incoming client event."""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-socketio-5.7.1/src/socketio/base_manager.py new/python-socketio-5.7.2/src/socketio/base_manager.py
--- old/python-socketio-5.7.1/src/socketio/base_manager.py 2022-07-15 21:05:00.000000000 +0200
+++ new/python-socketio-5.7.2/src/socketio/base_manager.py 2022-10-17 11:12:27.000000000 +0200
@@ -68,6 +68,7 @@
return self.rooms[namespace][None][sid] is not None
except KeyError:
pass
+ return False
def sid_from_eio_sid(self, eio_sid, namespace):
try:
@@ -94,7 +95,7 @@
self.pending_disconnect[namespace].append(sid)
return self.rooms[namespace][None].get(sid)
- def disconnect(self, sid, namespace):
+ def disconnect(self, sid, namespace, **kwargs):
"""Register a client disconnect from a namespace."""
if namespace not in self.rooms:
return
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-socketio-5.7.1/src/socketio/msgpack_packet.py new/python-socketio-5.7.2/src/socketio/msgpack_packet.py
--- old/python-socketio-5.7.1/src/socketio/msgpack_packet.py 2022-07-15 21:05:00.000000000 +0200
+++ new/python-socketio-5.7.2/src/socketio/msgpack_packet.py 2022-10-17 11:12:27.000000000 +0200
@@ -13,6 +13,6 @@
"""Decode a transmitted package."""
decoded = msgpack.loads(encoded_packet)
self.packet_type = decoded['type']
- self.data = decoded['data']
+ self.data = decoded.get('data')
self.id = decoded.get('id')
self.namespace = decoded['nsp']
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-socketio-5.7.1/src/socketio/pubsub_manager.py new/python-socketio-5.7.2/src/socketio/pubsub_manager.py
--- old/python-socketio-5.7.1/src/socketio/pubsub_manager.py 2022-07-15 21:05:00.000000000 +0200
+++ new/python-socketio-5.7.2/src/socketio/pubsub_manager.py 2022-10-17 11:12:27.000000000 +0200
@@ -75,7 +75,10 @@
self._publish({'method': 'disconnect', 'sid': sid,
'namespace': namespace or '/'})
- def disconnect(self, sid, namespace=None):
+ def disconnect(self, sid, namespace=None, **kwargs):
+ if kwargs.get('ignore_queue'):
+ return super(PubSubManager, self).disconnect(
+ sid, namespace=namespace)
self._publish({'method': 'disconnect', 'sid': sid,
'namespace': namespace or '/'})
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-socketio-5.7.1/src/socketio/server.py new/python-socketio-5.7.2/src/socketio/server.py
--- old/python-socketio-5.7.1/src/socketio/server.py 2022-07-15 21:05:00.000000000 +0200
+++ new/python-socketio-5.7.2/src/socketio/server.py 2022-10-17 11:12:27.000000000 +0200
@@ -565,7 +565,8 @@
self._send_packet(eio_sid, self.packet_class(
packet.DISCONNECT, namespace=namespace))
self._trigger_event('disconnect', namespace, sid)
- self.manager.disconnect(sid, namespace=namespace)
+ self.manager.disconnect(sid, namespace=namespace,
+ ignore_queue=True)
def transport(self, sid):
"""Return the name of the transport used by the client.
@@ -693,7 +694,7 @@
self._send_packet(eio_sid, self.packet_class(
packet.CONNECT_ERROR, data=fail_reason,
namespace=namespace))
- self.manager.disconnect(sid, namespace)
+ self.manager.disconnect(sid, namespace, ignore_queue=True)
elif not self.always_connect:
self._send_packet(eio_sid, self.packet_class(
packet.CONNECT, {'sid': sid}, namespace=namespace))
@@ -706,7 +707,7 @@
return
self.manager.pre_disconnect(sid, namespace=namespace)
self._trigger_event('disconnect', namespace, sid)
- self.manager.disconnect(sid, namespace)
+ self.manager.disconnect(sid, namespace, ignore_queue=True)
def _handle_event(self, eio_sid, namespace, id, data):
"""Handle an incoming client event."""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-socketio-5.7.1/tests/asyncio/test_asyncio_manager.py new/python-socketio-5.7.2/tests/asyncio/test_asyncio_manager.py
--- old/python-socketio-5.7.1/tests/asyncio/test_asyncio_manager.py 2022-07-15 21:05:00.000000000 +0200
+++ new/python-socketio-5.7.2/tests/asyncio/test_asyncio_manager.py 2022-10-17 11:12:27.000000000 +0200
@@ -59,9 +59,9 @@
assert self.bm.pre_disconnect(sid2, '/foo') == '456'
assert self.bm.pending_disconnect == {'/foo': [sid1, sid2]}
assert not self.bm.is_connected(sid2, '/foo')
- self.bm.disconnect(sid1, '/foo')
+ _run(self.bm.disconnect(sid1, '/foo'))
assert self.bm.pending_disconnect == {'/foo': [sid2]}
- self.bm.disconnect(sid2, '/foo')
+ _run(self.bm.disconnect(sid2, '/foo'))
assert self.bm.pending_disconnect == {}
def test_disconnect(self):
@@ -69,7 +69,7 @@
sid2 = self.bm.connect('456', '/foo')
self.bm.enter_room(sid1, '/foo', 'bar')
self.bm.enter_room(sid2, '/foo', 'baz')
- self.bm.disconnect(sid1, '/foo')
+ _run(self.bm.disconnect(sid1, '/foo'))
assert dict(self.bm.rooms['/foo'][None]) == {sid2: '456'}
assert dict(self.bm.rooms['/foo'][sid2]) == {sid2: '456'}
assert dict(self.bm.rooms['/foo']['baz']) == {sid2: '456'}
@@ -83,10 +83,10 @@
assert self.bm.is_connected(sid2, '/foo')
assert not self.bm.is_connected(sid2, '/')
assert not self.bm.is_connected(sid1, '/foo')
- self.bm.disconnect(sid1, '/')
+ _run(self.bm.disconnect(sid1, '/'))
assert not self.bm.is_connected(sid1, '/')
assert self.bm.is_connected(sid2, '/foo')
- self.bm.disconnect(sid2, '/foo')
+ _run(self.bm.disconnect(sid2, '/foo'))
assert not self.bm.is_connected(sid2, '/foo')
assert dict(self.bm.rooms['/'][None]) == {sid3: '456'}
assert dict(self.bm.rooms['/'][sid3]) == {sid3: '456'}
@@ -98,10 +98,10 @@
sid2 = self.bm.connect('123', '/foo')
sid3 = self.bm.connect('456', '/')
sid4 = self.bm.connect('456', '/foo')
- self.bm.disconnect(sid1, '/')
- self.bm.disconnect(sid2, '/foo')
- self.bm.disconnect(sid1, '/')
- self.bm.disconnect(sid2, '/foo')
+ _run(self.bm.disconnect(sid1, '/'))
+ _run(self.bm.disconnect(sid2, '/foo'))
+ _run(self.bm.disconnect(sid1, '/'))
+ _run(self.bm.disconnect(sid2, '/foo'))
assert dict(self.bm.rooms['/'][None]) == {sid3: '456'}
assert dict(self.bm.rooms['/'][sid3]) == {sid3: '456'}
assert dict(self.bm.rooms['/foo'][None]) == {sid4: '456'}
@@ -112,8 +112,8 @@
sid2 = self.bm.connect('456', '/foo')
self.bm.enter_room(sid1, '/foo', 'bar')
self.bm.enter_room(sid2, '/foo', 'baz')
- self.bm.disconnect(sid1, '/foo')
- self.bm.disconnect(sid2, '/foo')
+ _run(self.bm.disconnect(sid1, '/foo'))
+ _run(self.bm.disconnect(sid2, '/foo'))
assert self.bm.rooms == {}
def test_disconnect_with_callbacks(self):
@@ -123,9 +123,9 @@
self.bm._generate_ack_id(sid1, 'f')
self.bm._generate_ack_id(sid2, 'g')
self.bm._generate_ack_id(sid3, 'h')
- self.bm.disconnect(sid2, '/foo')
+ _run(self.bm.disconnect(sid2, '/foo'))
assert sid2 not in self.bm.callbacks
- self.bm.disconnect(sid1, '/')
+ _run(self.bm.disconnect(sid1, '/'))
assert sid1 not in self.bm.callbacks
assert sid3 in self.bm.callbacks
@@ -176,7 +176,7 @@
sid1 = self.bm.connect('123', '/')
sid2 = self.bm.connect('456', '/')
sid3 = self.bm.connect('789', '/')
- self.bm.disconnect(sid3, '/')
+ _run(self.bm.disconnect(sid3, '/'))
assert sid3 not in self.bm.rooms['/'][None]
participants = list(self.bm.get_participants('/', None))
assert len(participants) == 2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-socketio-5.7.1/tests/asyncio/test_asyncio_pubsub_manager.py new/python-socketio-5.7.2/tests/asyncio/test_asyncio_pubsub_manager.py
--- old/python-socketio-5.7.1/tests/asyncio/test_asyncio_pubsub_manager.py 2022-07-15 21:05:00.000000000 +0200
+++ new/python-socketio-5.7.2/tests/asyncio/test_asyncio_pubsub_manager.py 2022-10-17 11:12:27.000000000 +0200
@@ -176,6 +176,19 @@
{'method': 'disconnect', 'sid': sid, 'namespace': '/foo'}
)
+ def test_disconnect(self):
+ _run(self.pm.disconnect('foo', '/'))
+ self.pm._publish.mock.assert_called_once_with(
+ {'method': 'disconnect', 'sid': 'foo', 'namespace': '/'}
+ )
+
+ def test_disconnect_ignore_queue(self):
+ sid = self.pm.connect('123', '/')
+ self.pm.pre_disconnect(sid, '/')
+ _run(self.pm.disconnect(sid, '/', ignore_queue=True))
+ self.pm._publish.mock.assert_not_called()
+ assert self.pm.is_connected(sid, '/') is False
+
def test_close_room(self):
_run(self.pm.close_room('foo'))
self.pm._publish.mock.assert_called_once_with(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-socketio-5.7.1/tests/asyncio/test_asyncio_server.py new/python-socketio-5.7.2/tests/asyncio/test_asyncio_server.py
--- old/python-socketio-5.7.1/tests/asyncio/test_asyncio_server.py 2022-07-15 21:05:00.000000000 +0200
+++ new/python-socketio-5.7.2/tests/asyncio/test_asyncio_server.py 2022-10-17 11:12:27.000000000 +0200
@@ -597,14 +597,15 @@
def test_handle_disconnect(self, eio):
eio.return_value.send = AsyncMock()
s = asyncio_server.AsyncServer()
- s.manager.disconnect = mock.MagicMock()
+ s.manager.disconnect = AsyncMock()
handler = mock.MagicMock()
s.on('disconnect', handler)
_run(s._handle_eio_connect('123', 'environ'))
_run(s._handle_eio_message('123', '0'))
_run(s._handle_eio_disconnect('123'))
handler.assert_called_once_with('1')
- s.manager.disconnect.assert_called_once_with('1', '/')
+ s.manager.disconnect.mock.assert_called_once_with(
+ '1', '/', ignore_queue=True)
assert s.environ == {}
def test_handle_disconnect_namespace(self, eio):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-socketio-5.7.1/tests/common/test_pubsub_manager.py new/python-socketio-5.7.2/tests/common/test_pubsub_manager.py
--- old/python-socketio-5.7.1/tests/common/test_pubsub_manager.py 2022-07-15 21:05:00.000000000 +0200
+++ new/python-socketio-5.7.2/tests/common/test_pubsub_manager.py 2022-10-17 11:12:27.000000000 +0200
@@ -175,6 +175,13 @@
{'method': 'disconnect', 'sid': 'foo', 'namespace': '/'}
)
+ def test_disconnect_ignore_queue(self):
+ sid = self.pm.connect('123', '/')
+ self.pm.pre_disconnect(sid, '/')
+ self.pm.disconnect(sid, ignore_queue=True)
+ self.pm._publish.assert_not_called()
+ assert not self.pm.is_connected(sid, '/')
+
def test_close_room(self):
self.pm.close_room('foo')
self.pm._publish.assert_called_once_with(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/python-socketio-5.7.1/tests/common/test_server.py new/python-socketio-5.7.2/tests/common/test_server.py
--- old/python-socketio-5.7.1/tests/common/test_server.py 2022-07-15 21:05:00.000000000 +0200
+++ new/python-socketio-5.7.2/tests/common/test_server.py 2022-10-17 11:12:27.000000000 +0200
@@ -532,7 +532,8 @@
s._handle_eio_message('123', '0')
s._handle_eio_disconnect('123')
handler.assert_called_once_with('1')
- s.manager.disconnect.assert_called_once_with('1', '/')
+ s.manager.disconnect.assert_called_once_with('1', '/',
+ ignore_queue=True)
assert s.environ == {}
def test_handle_disconnect_namespace(self, eio):