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 2025-12-29 15:16:41
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-python-socketio (Old)
and /work/SRC/openSUSE:Factory/.python-python-socketio.new.1928 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-python-socketio"
Mon Dec 29 15:16:41 2025 rev:16 rq:1324590 version:5.16.0
Changes:
--------
---
/work/SRC/openSUSE:Factory/python-python-socketio/python-python-socketio.changes
2025-12-10 15:34:30.768336427 +0100
+++
/work/SRC/openSUSE:Factory/.python-python-socketio.new.1928/python-python-socketio.changes
2025-12-29 15:17:23.932476461 +0100
@@ -1,0 +2,9 @@
+Sun Dec 28 19:45:40 UTC 2025 - Dirk Müller <[email protected]>
+
+- update to 5.16.0:
+ * Address deprecation warnings (commit)
+ * Drop Python 3.8 and 3.9 from CI builds (commit)
+ * Restore support multiple arguments via pubsub emits #1540
+ (commit)
+
+-------------------------------------------------------------------
Old:
----
python_socketio-5.15.0.tar.gz
New:
----
python_socketio-5.16.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-python-socketio.spec ++++++
--- /var/tmp/diff_new_pack.JAZB1a/_old 2025-12-29 15:17:24.540501435 +0100
+++ /var/tmp/diff_new_pack.JAZB1a/_new 2025-12-29 15:17:24.540501435 +0100
@@ -18,7 +18,7 @@
%{?sle15_python_module_pythons}
Name: python-python-socketio
-Version: 5.15.0
+Version: 5.16.0
Release: 0
Summary: SocketIO server
License: MIT
++++++ python_socketio-5.15.0.tar.gz -> python_socketio-5.16.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-socketio-5.15.0/.github/workflows/tests.yml
new/python-socketio-5.16.0/.github/workflows/tests.yml
--- old/python-socketio-5.15.0/.github/workflows/tests.yml 2025-11-22
19:38:45.000000000 +0100
+++ new/python-socketio-5.16.0/.github/workflows/tests.yml 2025-12-25
00:51:21.000000000 +0100
@@ -16,7 +16,7 @@
strategy:
matrix:
os: [windows-latest, macos-latest, ubuntu-latest]
- python: ['3.8', '3.9', '3.10', '3.11', '3.12', '3.13', '3.14',
'pypy-3.11']
+ python: ['3.10', '3.11', '3.12', '3.13', '3.14', 'pypy-3.11']
fail-fast: false
runs-on: ${{ matrix.os }}
steps:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-socketio-5.15.0/CHANGES.md
new/python-socketio-5.16.0/CHANGES.md
--- old/python-socketio-5.15.0/CHANGES.md 2025-11-22 19:38:45.000000000
+0100
+++ new/python-socketio-5.16.0/CHANGES.md 2025-12-25 00:51:21.000000000
+0100
@@ -1,5 +1,14 @@
# python-socketio change log
+**Release 5.16.0** - 2025-12-24
+
+- Address deprecation warnings
([commit](https://github.com/miguelgrinberg/python-socketio/commit/b235699d9b06564753c570b76055997e9d62a938))
+- Drop Python 3.8 and 3.9 from CI builds
([commit](https://github.com/miguelgrinberg/python-socketio/commit/d0728d2f74538762dd551fa9cd0cd1fd5aedfa37))
+
+**Release 5.15.1** - 2025-12-16
+
+- Restore support multiple arguments via pubsub emits
[#1540](https://github.com/miguelgrinberg/python-socketio/issues/1540)
([commit](https://github.com/miguelgrinberg/python-socketio/commit/c279f26bb8c9887c4ca99d4d81ad331c4844438c))
+
**Release 5.15.0** - 2025-11-22
- Retry initial Redis connection
[#1534](https://github.com/miguelgrinberg/python-socketio/issues/1536) ([commit
#1](https://github.com/miguelgrinberg/python-socketio/commit/1e903e173a2d7b04599c4f7f9630c1abbb531fad)
[commit
#2](https://github.com/miguelgrinberg/python-socketio/commit/5e898a9b93526e6e667767e54c60f4c84589989d))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-socketio-5.15.0/examples/server/wsgi/django_socketio/requirements.txt
new/python-socketio-5.16.0/examples/server/wsgi/django_socketio/requirements.txt
---
old/python-socketio-5.15.0/examples/server/wsgi/django_socketio/requirements.txt
2025-11-22 19:38:45.000000000 +0100
+++
new/python-socketio-5.16.0/examples/server/wsgi/django_socketio/requirements.txt
2025-12-25 00:51:21.000000000 +0100
@@ -1,6 +1,6 @@
asgiref==3.6.0
bidict==0.22.1
-Django==4.2.26
+Django==4.2.27
gunicorn==23.0.0
h11==0.16.0
python-engineio
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-socketio-5.15.0/pyproject.toml
new/python-socketio-5.16.0/pyproject.toml
--- old/python-socketio-5.15.0/pyproject.toml 2025-11-22 19:38:45.000000000
+0100
+++ new/python-socketio-5.16.0/pyproject.toml 2025-12-25 00:51:21.000000000
+0100
@@ -1,6 +1,6 @@
[project]
name = "python-socketio"
-version = "5.15.0"
+version = "5.16.0"
license = {text = "MIT"}
authors = [
{ name = "Miguel Grinberg", email = "[email protected]" },
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-socketio-5.15.0/src/socketio/async_admin.py
new/python-socketio-5.16.0/src/socketio/async_admin.py
--- old/python-socketio-5.15.0/src/socketio/async_admin.py 2025-11-22
19:38:45.000000000 +0100
+++ new/python-socketio-5.16.0/src/socketio/async_admin.py 2025-12-25
00:51:21.000000000 +0100
@@ -1,6 +1,7 @@
import asyncio
from datetime import datetime, timezone
import functools
+import inspect
import os
import socket
import time
@@ -124,7 +125,7 @@
elif isinstance(self.auth, list):
authenticated = client_auth in self.auth
else:
- if asyncio.iscoroutinefunction(self.auth):
+ if inspect.iscoroutinefunction(self.auth):
authenticated = await self.auth(client_auth)
else:
authenticated = self.auth(client_auth)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-socketio-5.15.0/src/socketio/async_client.py
new/python-socketio-5.16.0/src/socketio/async_client.py
--- old/python-socketio-5.15.0/src/socketio/async_client.py 2025-11-22
19:38:45.000000000 +0100
+++ new/python-socketio-5.16.0/src/socketio/async_client.py 2025-12-25
00:51:21.000000000 +0100
@@ -1,4 +1,5 @@
import asyncio
+import inspect
import logging
import random
@@ -375,7 +376,7 @@
callables."""
if not callable(value):
return value
- if asyncio.iscoroutinefunction(value):
+ if inspect.iscoroutinefunction(value):
return await value()
return value()
@@ -437,7 +438,7 @@
else:
del self.callbacks[namespace][id]
if callback is not None:
- if asyncio.iscoroutinefunction(callback):
+ if inspect.iscoroutinefunction(callback):
await callback(*data)
else:
callback(*data)
@@ -464,7 +465,7 @@
# first see if we have an explicit handler for the event
handler, args = self._get_event_handler(event, namespace, args)
if handler:
- if asyncio.iscoroutinefunction(handler):
+ if inspect.iscoroutinefunction(handler):
try:
try:
ret = await handler(*args)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-socketio-5.15.0/src/socketio/async_manager.py
new/python-socketio-5.16.0/src/socketio/async_manager.py
--- old/python-socketio-5.15.0/src/socketio/async_manager.py 2025-11-22
19:38:45.000000000 +0100
+++ new/python-socketio-5.16.0/src/socketio/async_manager.py 2025-12-25
00:51:21.000000000 +0100
@@ -1,4 +1,5 @@
import asyncio
+import inspect
from engineio import packet as eio_packet
from socketio import packet
@@ -113,7 +114,7 @@
del self.callbacks[sid][id]
if callback is not None:
ret = callback(*data)
- if asyncio.iscoroutine(ret):
+ if inspect.iscoroutine(ret):
try:
await ret
except asyncio.CancelledError: # pragma: no cover
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-socketio-5.15.0/src/socketio/async_namespace.py
new/python-socketio-5.16.0/src/socketio/async_namespace.py
--- old/python-socketio-5.15.0/src/socketio/async_namespace.py 2025-11-22
19:38:45.000000000 +0100
+++ new/python-socketio-5.16.0/src/socketio/async_namespace.py 2025-12-25
00:51:21.000000000 +0100
@@ -1,4 +1,5 @@
import asyncio
+import inspect
from socketio import base_namespace
@@ -32,7 +33,7 @@
handler_name = 'on_' + (event or '')
if hasattr(self, handler_name):
handler = getattr(self, handler_name)
- if asyncio.iscoroutinefunction(handler) is True:
+ if inspect.iscoroutinefunction(handler) is True:
try:
try:
ret = await handler(*args)
@@ -213,7 +214,7 @@
handler_name = 'on_' + (event or '')
if hasattr(self, handler_name):
handler = getattr(self, handler_name)
- if asyncio.iscoroutinefunction(handler) is True:
+ if inspect.iscoroutinefunction(handler) is True:
try:
try:
ret = await handler(*args)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-socketio-5.15.0/src/socketio/async_pubsub_manager.py
new/python-socketio-5.16.0/src/socketio/async_pubsub_manager.py
--- old/python-socketio-5.15.0/src/socketio/async_pubsub_manager.py
2025-11-22 19:38:45.000000000 +0100
+++ new/python-socketio-5.16.0/src/socketio/async_pubsub_manager.py
2025-12-25 00:51:21.000000000 +0100
@@ -66,6 +66,10 @@
callback = (room, namespace, id)
else:
callback = None
+ if isinstance(data, tuple):
+ data = list(data)
+ else:
+ data = [data]
binary = Packet.data_is_binary(data)
if binary:
data, attachments = Packet.deconstruct_binary(data)
@@ -155,6 +159,11 @@
if message.get('binary'):
attachments = [base64.b64decode(a) for a in data[1:]]
data = Packet.reconstruct_binary(data[0], attachments)
+ if isinstance(data, list):
+ if len(data) == 1:
+ data = data[0]
+ else:
+ data = tuple(data)
await super().emit(message['event'], data,
namespace=message.get('namespace'),
room=message.get('room'),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-socketio-5.15.0/src/socketio/async_server.py
new/python-socketio-5.16.0/src/socketio/async_server.py
--- old/python-socketio-5.15.0/src/socketio/async_server.py 2025-11-22
19:38:45.000000000 +0100
+++ new/python-socketio-5.16.0/src/socketio/async_server.py 2025-12-25
00:51:21.000000000 +0100
@@ -1,4 +1,5 @@
import asyncio
+import inspect
import engineio
@@ -637,7 +638,7 @@
# first see if we have an explicit handler for the event
handler, args = self._get_event_handler(event, namespace, args)
if handler:
- if asyncio.iscoroutinefunction(handler):
+ if inspect.iscoroutinefunction(handler):
try:
try:
ret = await handler(*args)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-socketio-5.15.0/src/socketio/pubsub_manager.py
new/python-socketio-5.16.0/src/socketio/pubsub_manager.py
--- old/python-socketio-5.15.0/src/socketio/pubsub_manager.py 2025-11-22
19:38:45.000000000 +0100
+++ new/python-socketio-5.16.0/src/socketio/pubsub_manager.py 2025-12-25
00:51:21.000000000 +0100
@@ -63,6 +63,10 @@
callback = (room, namespace, id)
else:
callback = None
+ if isinstance(data, tuple):
+ data = list(data)
+ else:
+ data = [data]
binary = Packet.data_is_binary(data)
if binary:
data, attachments = Packet.deconstruct_binary(data)
@@ -151,6 +155,11 @@
if message.get('binary'):
attachments = [base64.b64decode(a) for a in data[1:]]
data = Packet.reconstruct_binary(data[0], attachments)
+ if isinstance(data, list):
+ if len(data) == 1:
+ data = data[0]
+ else:
+ data = tuple(data)
super().emit(message['event'], data,
namespace=message.get('namespace'),
room=message.get('room'),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-socketio-5.15.0/tests/async/test_pubsub_manager.py
new/python-socketio-5.16.0/tests/async/test_pubsub_manager.py
--- old/python-socketio-5.15.0/tests/async/test_pubsub_manager.py
2025-11-22 19:38:45.000000000 +0100
+++ new/python-socketio-5.16.0/tests/async/test_pubsub_manager.py
2025-12-25 00:51:21.000000000 +0100
@@ -58,7 +58,7 @@
'method': 'emit',
'event': 'foo',
'binary': False,
- 'data': 'bar',
+ 'data': ['bar'],
'namespace': '/',
'room': None,
'skip_sid': None,
@@ -74,7 +74,7 @@
'method': 'emit',
'event': 'foo',
'binary': True,
- 'data': [{'_placeholder': True, 'num': 0}, 'YmFy'],
+ 'data': [[{'_placeholder': True, 'num': 0}], 'YmFy'],
'namespace': '/',
'room': None,
'skip_sid': None,
@@ -88,7 +88,7 @@
'method': 'emit',
'event': 'foo',
'binary': True,
- 'data': [{'foo': {'_placeholder': True, 'num': 0}}, 'YmFy'],
+ 'data': [[{'foo': {'_placeholder': True, 'num': 0}}], 'YmFy'],
'namespace': '/',
'room': None,
'skip_sid': None,
@@ -104,7 +104,7 @@
'method': 'emit',
'event': 'foo',
'binary': True,
- 'data': [{'_placeholder': True, 'num': 0}, 'YmFy'],
+ 'data': [[{'_placeholder': True, 'num': 0}], 'YmFy'],
'namespace': '/',
'room': None,
'skip_sid': None,
@@ -118,7 +118,87 @@
'method': 'emit',
'event': 'foo',
'binary': True,
- 'data': [{'foo': {'_placeholder': True, 'num': 0}}, 'YmFy'],
+ 'data': [[{'foo': {'_placeholder': True, 'num': 0}}], 'YmFy'],
+ 'namespace': '/',
+ 'room': None,
+ 'skip_sid': None,
+ 'callback': None,
+ 'host_id': '123456',
+ }
+ )
+
+ async def test_emit_list(self):
+ await self.pm.emit('foo', [1, 'two'])
+ self.pm._publish.assert_awaited_once_with(
+ {
+ 'method': 'emit',
+ 'event': 'foo',
+ 'binary': False,
+ 'data': [[1, 'two']],
+ 'namespace': '/',
+ 'room': None,
+ 'skip_sid': None,
+ 'callback': None,
+ 'host_id': '123456',
+ }
+ )
+ await self.pm.emit('foo', [1, b'two', 'three'])
+ self.pm._publish.assert_awaited_with(
+ {
+ 'method': 'emit',
+ 'event': 'foo',
+ 'binary': True,
+ 'data': [
+ [[1, {'_placeholder': True, 'num': 0}, 'three']], 'dHdv',
+ ],
+ 'namespace': '/',
+ 'room': None,
+ 'skip_sid': None,
+ 'callback': None,
+ 'host_id': '123456',
+ }
+ )
+
+ async def test_emit_no_arguments(self):
+ await self.pm.emit('foo', ())
+ self.pm._publish.assert_awaited_once_with(
+ {
+ 'method': 'emit',
+ 'event': 'foo',
+ 'binary': False,
+ 'data': [],
+ 'namespace': '/',
+ 'room': None,
+ 'skip_sid': None,
+ 'callback': None,
+ 'host_id': '123456',
+ }
+ )
+
+ async def test_emit_multiple_arguments(self):
+ await self.pm.emit('foo', (1, 'two'))
+ self.pm._publish.assert_awaited_once_with(
+ {
+ 'method': 'emit',
+ 'event': 'foo',
+ 'binary': False,
+ 'data': [1, 'two'],
+ 'namespace': '/',
+ 'room': None,
+ 'skip_sid': None,
+ 'callback': None,
+ 'host_id': '123456',
+ }
+ )
+ await self.pm.emit('foo', (1, b'two', 'three'))
+ self.pm._publish.assert_awaited_with(
+ {
+ 'method': 'emit',
+ 'event': 'foo',
+ 'binary': True,
+ 'data': [
+ [1, {'_placeholder': True, 'num': 0}, 'three'], 'dHdv',
+ ],
'namespace': '/',
'room': None,
'skip_sid': None,
@@ -135,7 +215,7 @@
'method': 'emit',
'event': 'foo',
'binary': False,
- 'data': 'bar',
+ 'data': ['bar'],
'namespace': '/',
'room': sid,
'skip_sid': None,
@@ -151,7 +231,7 @@
'method': 'emit',
'event': 'foo',
'binary': False,
- 'data': 'bar',
+ 'data': ['bar'],
'namespace': '/baz',
'room': None,
'skip_sid': None,
@@ -167,7 +247,7 @@
'method': 'emit',
'event': 'foo',
'binary': False,
- 'data': 'bar',
+ 'data': ['bar'],
'namespace': '/',
'room': 'baz',
'skip_sid': None,
@@ -183,7 +263,7 @@
'method': 'emit',
'event': 'foo',
'binary': False,
- 'data': 'bar',
+ 'data': ['bar'],
'namespace': '/',
'room': None,
'skip_sid': 'baz',
@@ -202,7 +282,7 @@
'method': 'emit',
'event': 'foo',
'binary': False,
- 'data': 'bar',
+ 'data': ['bar'],
'namespace': '/',
'room': 'baz',
'skip_sid': None,
@@ -297,6 +377,20 @@
with mock.patch.object(
async_manager.AsyncManager, 'emit'
) as super_emit:
+ await self.pm._handle_emit({'event': 'foo', 'data': ['bar']})
+ super_emit.assert_awaited_once_with(
+ 'foo',
+ 'bar',
+ namespace=None,
+ room=None,
+ skip_sid=None,
+ callback=None,
+ )
+
+ async def test_handle_legacy_emit(self):
+ with mock.patch.object(
+ async_manager.AsyncManager, 'emit'
+ ) as super_emit:
await self.pm._handle_emit({'event': 'foo', 'data': 'bar'})
super_emit.assert_awaited_once_with(
'foo',
@@ -314,6 +408,37 @@
await self.pm._handle_emit({
'event': 'foo',
'binary': True,
+ 'data': [[{'_placeholder': True, 'num': 0}], 'YmFy'],
+ })
+ super_emit.assert_awaited_once_with(
+ 'foo',
+ b'bar',
+ namespace=None,
+ room=None,
+ skip_sid=None,
+ callback=None,
+ )
+ await self.pm._handle_emit({
+ 'event': 'foo',
+ 'binary': True,
+ 'data': [[{'foo': {'_placeholder': True, 'num': 0}}], 'YmFy'],
+ })
+ super_emit.assert_awaited_with(
+ 'foo',
+ {'foo': b'bar'},
+ namespace=None,
+ room=None,
+ skip_sid=None,
+ callback=None,
+ )
+
+ async def test_handle_legacy_emit_binary(self):
+ with mock.patch.object(
+ async_manager.AsyncManager, 'emit'
+ ) as super_emit:
+ await self.pm._handle_emit({
+ 'event': 'foo',
+ 'binary': True,
'data': [{'_placeholder': True, 'num': 0}, 'YmFy'],
})
super_emit.assert_awaited_once_with(
@@ -335,6 +460,78 @@
namespace=None,
room=None,
skip_sid=None,
+ callback=None,
+ )
+
+ async def test_handle_emit_list(self):
+ with mock.patch.object(
+ async_manager.AsyncManager, 'emit'
+ ) as super_emit:
+ await self.pm._handle_emit({'event': 'foo', 'data': [[1, 'two']]})
+ super_emit.assert_awaited_once_with(
+ 'foo',
+ [1, 'two'],
+ namespace=None,
+ room=None,
+ skip_sid=None,
+ callback=None,
+ )
+ await self.pm._handle_emit({
+ 'event': 'foo',
+ 'binary': True,
+ 'data': [
+ [[1, {'_placeholder': True, 'num': 0}, 'three']], 'dHdv'
+ ]
+ })
+ super_emit.assert_awaited_with(
+ 'foo',
+ [1, b'two', 'three'],
+ namespace=None,
+ room=None,
+ skip_sid=None,
+ callback=None,
+ )
+
+ async def test_handle_emit_no_arguments(self):
+ with mock.patch.object(
+ async_manager.AsyncManager, 'emit'
+ ) as super_emit:
+ await self.pm._handle_emit({'event': 'foo', 'data': []})
+ super_emit.assert_awaited_once_with(
+ 'foo',
+ (),
+ namespace=None,
+ room=None,
+ skip_sid=None,
+ callback=None,
+ )
+
+ async def test_handle_emit_multiple_arguments(self):
+ with mock.patch.object(
+ async_manager.AsyncManager, 'emit'
+ ) as super_emit:
+ await self.pm._handle_emit({'event': 'foo', 'data': [1, 'two']})
+ super_emit.assert_awaited_once_with(
+ 'foo',
+ (1, 'two'),
+ namespace=None,
+ room=None,
+ skip_sid=None,
+ callback=None,
+ )
+ await self.pm._handle_emit({
+ 'event': 'foo',
+ 'binary': True,
+ 'data': [
+ [1, {'_placeholder': True, 'num': 0}, 'three'], 'dHdv'
+ ]
+ })
+ super_emit.assert_awaited_with(
+ 'foo',
+ (1, b'two', 'three'),
+ namespace=None,
+ room=None,
+ skip_sid=None,
callback=None,
)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-socketio-5.15.0/tests/common/test_pubsub_manager.py
new/python-socketio-5.16.0/tests/common/test_pubsub_manager.py
--- old/python-socketio-5.15.0/tests/common/test_pubsub_manager.py
2025-11-22 19:38:45.000000000 +0100
+++ new/python-socketio-5.16.0/tests/common/test_pubsub_manager.py
2025-12-25 00:51:21.000000000 +0100
@@ -70,7 +70,7 @@
'method': 'emit',
'event': 'foo',
'binary': False,
- 'data': 'bar',
+ 'data': ['bar'],
'namespace': '/',
'room': None,
'skip_sid': None,
@@ -86,7 +86,7 @@
'method': 'emit',
'event': 'foo',
'binary': True,
- 'data': [{'_placeholder': True, 'num': 0}, 'YmFy'],
+ 'data': [[{'_placeholder': True, 'num': 0}], 'YmFy'],
'namespace': '/',
'room': None,
'skip_sid': None,
@@ -100,7 +100,7 @@
'method': 'emit',
'event': 'foo',
'binary': True,
- 'data': [{'foo': {'_placeholder': True, 'num': 0}}, 'YmFy'],
+ 'data': [[{'foo': {'_placeholder': True, 'num': 0}}], 'YmFy'],
'namespace': '/',
'room': None,
'skip_sid': None,
@@ -116,7 +116,7 @@
'method': 'emit',
'event': 'foo',
'binary': True,
- 'data': [{'_placeholder': True, 'num': 0}, 'YmFy'],
+ 'data': [[{'_placeholder': True, 'num': 0}], 'YmFy'],
'namespace': '/',
'room': None,
'skip_sid': None,
@@ -130,7 +130,87 @@
'method': 'emit',
'event': 'foo',
'binary': True,
- 'data': [{'foo': {'_placeholder': True, 'num': 0}}, 'YmFy'],
+ 'data': [[{'foo': {'_placeholder': True, 'num': 0}}], 'YmFy'],
+ 'namespace': '/',
+ 'room': None,
+ 'skip_sid': None,
+ 'callback': None,
+ 'host_id': '123456',
+ }
+ )
+
+ def test_emit_list(self):
+ self.pm.emit('foo', [1, 'two'])
+ self.pm._publish.assert_called_once_with(
+ {
+ 'method': 'emit',
+ 'event': 'foo',
+ 'binary': False,
+ 'data': [[1, 'two']],
+ 'namespace': '/',
+ 'room': None,
+ 'skip_sid': None,
+ 'callback': None,
+ 'host_id': '123456',
+ }
+ )
+ self.pm.emit('foo', [1, b'two', 'three'])
+ self.pm._publish.assert_called_with(
+ {
+ 'method': 'emit',
+ 'event': 'foo',
+ 'binary': True,
+ 'data': [
+ [[1, {'_placeholder': True, 'num': 0}, 'three']], 'dHdv',
+ ],
+ 'namespace': '/',
+ 'room': None,
+ 'skip_sid': None,
+ 'callback': None,
+ 'host_id': '123456',
+ }
+ )
+
+ def test_emit_no_arguments(self):
+ self.pm.emit('foo', ())
+ self.pm._publish.assert_called_once_with(
+ {
+ 'method': 'emit',
+ 'event': 'foo',
+ 'binary': False,
+ 'data': [],
+ 'namespace': '/',
+ 'room': None,
+ 'skip_sid': None,
+ 'callback': None,
+ 'host_id': '123456',
+ }
+ )
+
+ def test_emit_multiple_arguments(self):
+ self.pm.emit('foo', (1, 'two'))
+ self.pm._publish.assert_called_once_with(
+ {
+ 'method': 'emit',
+ 'event': 'foo',
+ 'binary': False,
+ 'data': [1, 'two'],
+ 'namespace': '/',
+ 'room': None,
+ 'skip_sid': None,
+ 'callback': None,
+ 'host_id': '123456',
+ }
+ )
+ self.pm.emit('foo', (1, b'two', 'three'))
+ self.pm._publish.assert_called_with(
+ {
+ 'method': 'emit',
+ 'event': 'foo',
+ 'binary': True,
+ 'data': [
+ [1, {'_placeholder': True, 'num': 0}, 'three'], 'dHdv',
+ ],
'namespace': '/',
'room': None,
'skip_sid': None,
@@ -147,7 +227,7 @@
'method': 'emit',
'event': 'foo',
'binary': False,
- 'data': 'bar',
+ 'data': ['bar'],
'namespace': '/',
'room': sid,
'skip_sid': None,
@@ -163,7 +243,7 @@
'method': 'emit',
'event': 'foo',
'binary': False,
- 'data': 'bar',
+ 'data': ['bar'],
'namespace': '/baz',
'room': None,
'skip_sid': None,
@@ -179,7 +259,7 @@
'method': 'emit',
'event': 'foo',
'binary': False,
- 'data': 'bar',
+ 'data': ['bar'],
'namespace': '/',
'room': 'baz',
'skip_sid': None,
@@ -195,7 +275,7 @@
'method': 'emit',
'event': 'foo',
'binary': False,
- 'data': 'bar',
+ 'data': ['bar'],
'namespace': '/',
'room': None,
'skip_sid': 'baz',
@@ -214,7 +294,7 @@
'method': 'emit',
'event': 'foo',
'binary': False,
- 'data': 'bar',
+ 'data': ['bar'],
'namespace': '/',
'room': 'baz',
'skip_sid': None,
@@ -306,6 +386,18 @@
def test_handle_emit(self):
with mock.patch.object(manager.Manager, 'emit') as super_emit:
+ self.pm._handle_emit({'event': 'foo', 'data': ['bar']})
+ super_emit.assert_called_once_with(
+ 'foo',
+ 'bar',
+ namespace=None,
+ room=None,
+ skip_sid=None,
+ callback=None,
+ )
+
+ def test_handle_legacy_emit(self):
+ with mock.patch.object(manager.Manager, 'emit') as super_emit:
self.pm._handle_emit({'event': 'foo', 'data': 'bar'})
super_emit.assert_called_once_with(
'foo',
@@ -321,6 +413,35 @@
self.pm._handle_emit({
'event': 'foo',
'binary': True,
+ 'data': [[{'_placeholder': True, 'num': 0}], 'YmFy'],
+ })
+ super_emit.assert_called_once_with(
+ 'foo',
+ b'bar',
+ namespace=None,
+ room=None,
+ skip_sid=None,
+ callback=None,
+ )
+ self.pm._handle_emit({
+ 'event': 'foo',
+ 'binary': True,
+ 'data': [[{'foo': {'_placeholder': True, 'num': 0}}], 'YmFy'],
+ })
+ super_emit.assert_called_with(
+ 'foo',
+ {'foo': b'bar'},
+ namespace=None,
+ room=None,
+ skip_sid=None,
+ callback=None,
+ )
+
+ def test_handle_legacy_emit_binary(self):
+ with mock.patch.object(manager.Manager, 'emit') as super_emit:
+ self.pm._handle_emit({
+ 'event': 'foo',
+ 'binary': True,
'data': [{'_placeholder': True, 'num': 0}, 'YmFy'],
})
super_emit.assert_called_once_with(
@@ -342,6 +463,72 @@
namespace=None,
room=None,
skip_sid=None,
+ callback=None,
+ )
+
+ def test_handle_emit_list(self):
+ with mock.patch.object(manager.Manager, 'emit') as super_emit:
+ self.pm._handle_emit({'event': 'foo', 'data': [[1, 'two']]})
+ super_emit.assert_called_once_with(
+ 'foo',
+ [1, 'two'],
+ namespace=None,
+ room=None,
+ skip_sid=None,
+ callback=None,
+ )
+ self.pm._handle_emit({
+ 'event': 'foo',
+ 'binary': True,
+ 'data': [
+ [[1, {'_placeholder': True, 'num': 0}, 'three']], 'dHdv'
+ ],
+ })
+ super_emit.assert_called_with(
+ 'foo',
+ [1, b'two', 'three'],
+ namespace=None,
+ room=None,
+ skip_sid=None,
+ callback=None,
+ )
+
+ def test_handle_emit_no_arguments(self):
+ with mock.patch.object(manager.Manager, 'emit') as super_emit:
+ self.pm._handle_emit({'event': 'foo', 'data': []})
+ super_emit.assert_called_once_with(
+ 'foo',
+ (),
+ namespace=None,
+ room=None,
+ skip_sid=None,
+ callback=None,
+ )
+
+ def test_handle_emit_multiple_arguments(self):
+ with mock.patch.object(manager.Manager, 'emit') as super_emit:
+ self.pm._handle_emit({'event': 'foo', 'data': [1, 'two']})
+ super_emit.assert_called_once_with(
+ 'foo',
+ (1, 'two'),
+ namespace=None,
+ room=None,
+ skip_sid=None,
+ callback=None,
+ )
+ self.pm._handle_emit({
+ 'event': 'foo',
+ 'binary': True,
+ 'data': [
+ [1, {'_placeholder': True, 'num': 0}, 'three'], 'dHdv'
+ ],
+ })
+ super_emit.assert_called_with(
+ 'foo',
+ (1, b'two', 'three'),
+ namespace=None,
+ room=None,
+ skip_sid=None,
callback=None,
)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-socketio-5.15.0/tox.ini
new/python-socketio-5.16.0/tox.ini
--- old/python-socketio-5.15.0/tox.ini 2025-11-22 19:38:45.000000000 +0100
+++ new/python-socketio-5.16.0/tox.ini 2025-12-25 00:51:21.000000000 +0100
@@ -1,11 +1,9 @@
[tox]
-envlist=flake8,py{38,39,310,311,312,313,314},docs
+envlist=flake8,py{310,311,312,313,314},docs
skip_missing_interpreters=True
[gh-actions]
python =
- 3.8: py38
- 3.9: py39
3.10: py310
3.11: py311
3.12: py312