Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-python-engineio for 
openSUSE:Factory checked in at 2025-12-29 15:16:48
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-python-engineio (Old)
 and      /work/SRC/openSUSE:Factory/.python-python-engineio.new.1928 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-python-engineio"

Mon Dec 29 15:16:48 2025 rev:13 rq:1324594 version:4.13.0

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/python-python-engineio/python-python-engineio.changes
    2025-11-12 21:14:34.514606320 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-python-engineio.new.1928/python-python-engineio.changes
  2025-12-29 15:17:30.928763822 +0100
@@ -1,0 +2,11 @@
+Sun Dec 28 20:25:12 UTC 2025 - Dirk Müller <[email protected]>
+
+- update to 4.13.0:
+  * Apply escaping rules when parsing cookie values (commit)
+  * Several minor improvements to the aiohttp integration #419
+  * Clarify logging behavior in documentation #421 (commit)
+  * Address deprecation warnings #422 (commit)
+  * Add 3.14 and pypy-3.11 CI builds (commit)
+  * Drop Python 3.8 and 3.9 from CI builds (commit)
+
+-------------------------------------------------------------------

Old:
----
  python-engineio-4.12.3.tar.gz

New:
----
  python-engineio-4.13.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-python-engineio.spec ++++++
--- /var/tmp/diff_new_pack.ZEBSEE/_old  2025-12-29 15:17:33.180856372 +0100
+++ /var/tmp/diff_new_pack.ZEBSEE/_new  2025-12-29 15:17:33.192856864 +0100
@@ -18,7 +18,7 @@
 
 %{?sle15_python_module_pythons}
 Name:           python-python-engineio
-Version:        4.12.3
+Version:        4.13.0
 Release:        0
 Summary:        EngineIO server
 License:        MIT

++++++ python-engineio-4.12.3.tar.gz -> python-engineio-4.13.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-engineio-4.12.3/.github/workflows/tests.yml 
new/python-engineio-4.13.0/.github/workflows/tests.yml
--- old/python-engineio-4.12.3/.github/workflows/tests.yml      2025-09-28 
08:29:18.000000000 +0200
+++ new/python-engineio-4.13.0/.github/workflows/tests.yml      2025-12-24 
23:34:59.000000000 +0100
@@ -22,14 +22,7 @@
     strategy:
       matrix:
         os: [ubuntu-latest, macos-latest, windows-latest]
-        python: ['3.8', '3.9', '3.10', '3.11', '3.12', '3.13', 'pypy-3.10']
-        exclude:
-          # pypy3 currently fails to run on Windows
-          - os: windows-latest
-            python: pypy-3.8
-          # the loop fails to close in the Mac version of 3.9
-          - os: macos-latest
-            python: '3.9'
+        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-engineio-4.12.3/CHANGES.md 
new/python-engineio-4.13.0/CHANGES.md
--- old/python-engineio-4.12.3/CHANGES.md       2025-09-28 08:29:18.000000000 
+0200
+++ new/python-engineio-4.13.0/CHANGES.md       2025-12-24 23:34:59.000000000 
+0100
@@ -1,5 +1,14 @@
 # python-engineio change log
 
+**Release 4.13.0** - 2025-12-24
+
+- Apply escaping rules when parsing cookie values 
([commit](https://github.com/miguelgrinberg/python-engineio/commit/04e7c4dd4792d1f551b71930ec771fbb96cdaaf2))
+- Several minor improvements to the aiohttp integration 
[#419](https://github.com/miguelgrinberg/python-engineio/issues/419) 
([commit](https://github.com/miguelgrinberg/python-engineio/commit/f7cb71c9d7ef961e839f0eb1e570d76b4ce481da))
 (thanks **PaulWasTaken**!)
+- Clarify logging behavior in documentation 
[#421](https://github.com/miguelgrinberg/python-engineio/issues/421) 
([commit](https://github.com/miguelgrinberg/python-engineio/commit/7fe1771e7463960f6ef08f9bcc22b42c8df1012b))
 (thanks **ZipFile**!)
+- Address deprecation warnings 
[#422](https://github.com/miguelgrinberg/python-engineio/issues/422) 
([commit](https://github.com/miguelgrinberg/python-engineio/commit/b90cbf2b981c301968611b495dd548c4b0153223))
+- Add 3.14 and pypy-3.11 CI builds 
([commit](https://github.com/miguelgrinberg/python-engineio/commit/df3d9741495d93f4ad0f2ec9f7b3a1d795f2234c))
+- Drop Python 3.8 and 3.9 from CI builds 
([commit](https://github.com/miguelgrinberg/python-engineio/commit/697b50f5bbc68b2416778d537ed88fefc8b004f0))
+
 **Release 4.12.3** - 2025-09-28
 
 - Reset client queue upon disconnection 
[#414](https://github.com/miguelgrinberg/python-engineio/issues/414) 
([commit](https://github.com/miguelgrinberg/python-engineio/commit/af57bf235b824f7f179a68ef61a03d76a2c56655))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-engineio-4.12.3/docs/client.rst 
new/python-engineio-4.13.0/docs/client.rst
--- old/python-engineio-4.12.3/docs/client.rst  2025-09-28 08:29:18.000000000 
+0200
+++ new/python-engineio-4.13.0/docs/client.rst  2025-12-24 23:34:59.000000000 
+0100
@@ -199,9 +199,13 @@
     # asyncio
     eio = engineio.AsyncClient(logger=True)
 
-The ``logger`` argument can be set to ``True`` to output logs to ``stderr``, or
-to an object compatible with Python's ``logging`` package where the logs should
-be emitted to. A value of ``False`` disables logging.
+The ``logger`` argument controls logging behavior:
+
+* ``True``: Enables log output to ``stderr`` at the ``INFO`` level.
+* ``False``: Enables log output to ``stderr`` at the ``ERROR`` level. This is
+  the default.
+* A ``logging.Logger`` instance: Uses the provided logger without additional
+  configuration.
 
 Logging can help identify the cause of connection problems, unexpected
 disconnections and other issues.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-engineio-4.12.3/docs/server.rst 
new/python-engineio-4.13.0/docs/server.rst
--- old/python-engineio-4.12.3/docs/server.rst  2025-09-28 08:29:18.000000000 
+0200
+++ new/python-engineio-4.13.0/docs/server.rst  2025-12-24 23:34:59.000000000 
+0100
@@ -350,9 +350,13 @@
     # asyncio
     eio = engineio.AsyncServer(logger=True)
 
-The ``logger`` argument can be set to ``True`` to output logs to ``stderr``, or
-to an object compatible with Python's ``logging`` package where the logs should
-be emitted to. A value of ``False`` disables logging.
+The ``logger`` argument controls logging behavior:
+
+* ``True``: Enables log output to ``stderr`` at the ``INFO`` level.
+* ``False``: Enables log output to ``stderr`` at the ``ERROR`` level. This is
+  the default.
+* A ``logging.Logger`` instance: Uses the provided logger without additional
+  configuration.
 
 Logging can help identify the cause of connection problems, 400 responses,
 bad performance and other issues.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-engineio-4.12.3/examples/client/asyncio/latency_client.py 
new/python-engineio-4.13.0/examples/client/asyncio/latency_client.py
--- old/python-engineio-4.12.3/examples/client/asyncio/latency_client.py        
2025-09-28 08:29:18.000000000 +0200
+++ new/python-engineio-4.13.0/examples/client/asyncio/latency_client.py        
2025-12-24 23:34:59.000000000 +0100
@@ -2,7 +2,6 @@
 import time
 import engineio
 
-loop = asyncio.get_event_loop()
 eio = engineio.AsyncClient()
 start_timer = None
 
@@ -33,4 +32,4 @@
 
 
 if __name__ == '__main__':
-    loop.run_until_complete(start_client())
+    asyncio.run(start_client())
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-engineio-4.12.3/examples/client/asyncio/simple_client.py 
new/python-engineio-4.13.0/examples/client/asyncio/simple_client.py
--- old/python-engineio-4.12.3/examples/client/asyncio/simple_client.py 
2025-09-28 08:29:18.000000000 +0200
+++ new/python-engineio-4.13.0/examples/client/asyncio/simple_client.py 
2025-12-24 23:34:59.000000000 +0100
@@ -2,7 +2,6 @@
 import signal
 import engineio
 
-loop = asyncio.get_event_loop()
 eio = engineio.AsyncClient()
 exit_event = asyncio.Event()
 original_signal_handler = None
@@ -50,4 +49,4 @@
 
 if __name__ == '__main__':
     original_signal_handler = signal.signal(signal.SIGINT, signal_handler)
-    loop.run_until_complete(start_client())
+    asyncio.run(start_client())
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-engineio-4.12.3/pyproject.toml 
new/python-engineio-4.13.0/pyproject.toml
--- old/python-engineio-4.12.3/pyproject.toml   2025-09-28 08:29:18.000000000 
+0200
+++ new/python-engineio-4.13.0/pyproject.toml   2025-12-24 23:34:59.000000000 
+0100
@@ -1,6 +1,6 @@
 [project]
 name = "python-engineio"
-version = "4.12.3"
+version = "4.13.0"
 license = {text = "MIT"}
 authors = [{name = "Miguel Grinberg", email = "[email protected]"}]
 description = "Engine.IO server and client for Python"
@@ -10,7 +10,7 @@
     "Programming Language :: Python :: 3",
     "Operating System :: OS Independent",
 ]
-requires-python = ">=3.6"
+requires-python = ">=3.8"
 dependencies = ["simple-websocket >= 0.10.0"]
 
 [project.readme]
@@ -26,8 +26,15 @@
     "requests >= 2.21.0",
     "websocket-client >= 0.54.0",
 ]
-asyncio_client = ["aiohttp >= 3.4"]
-docs = ["sphinx"]
+asyncio_client = [
+    "aiohttp >= 3.4"
+]
+dev = [
+    "tox",
+]
+docs = [
+    "sphinx",
+]
 
 [tool.setuptools]
 zip-safe = false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-engineio-4.12.3/src/engineio/async_client.py 
new/python-engineio-4.13.0/src/engineio/async_client.py
--- old/python-engineio-4.12.3/src/engineio/async_client.py     2025-09-28 
08:29:18.000000000 +0200
+++ new/python-engineio-4.13.0/src/engineio/async_client.py     2025-12-24 
23:34:59.000000000 +0100
@@ -1,4 +1,6 @@
 import asyncio
+from http.cookies import SimpleCookie
+import inspect
 import signal
 import ssl
 import threading
@@ -319,16 +321,16 @@
 
         # extract any new cookies passed in a header so that they can also be
         # sent the the WebSocket route
-        cookies = {}
         for header, value in headers.items():
             if header.lower() == 'cookie':
-                cookies = dict(
-                    [cookie.split('=', 1) for cookie in value.split('; ')])
+                ck = SimpleCookie(headers[header])
+                self.http.cookie_jar.update_cookies(
+                    {k: m.value for k, m in ck.items()})
                 del headers[header]
                 break
-        self.http.cookie_jar.update_cookies(cookies)
 
-        extra_options = {'timeout': self.request_timeout}
+        extra_options = {
+            'timeout': aiohttp.ClientWSTimeout(ws_close=self.request_timeout)}
         if not self.ssl_verify:
             ssl_context = ssl.create_default_context()
             ssl_context.check_hostname = False
@@ -468,7 +470,7 @@
         run_async = kwargs.pop('run_async', False)
         ret = None
         if event in self.handlers:
-            if asyncio.iscoroutinefunction(self.handlers[event]) is True:
+            if inspect.iscoroutinefunction(self.handlers[event]) is True:
                 if run_async:
                     task = self.start_background_task(self.handlers[event],
                                                       *args)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-engineio-4.12.3/src/engineio/async_drivers/aiohttp.py 
new/python-engineio-4.13.0/src/engineio/async_drivers/aiohttp.py
--- old/python-engineio-4.12.3/src/engineio/async_drivers/aiohttp.py    
2025-09-28 08:29:18.000000000 +0200
+++ new/python-engineio-4.13.0/src/engineio/async_drivers/aiohttp.py    
2025-12-24 23:34:59.000000000 +0100
@@ -1,6 +1,5 @@
-import asyncio
+import inspect
 import sys
-from urllib.parse import urlsplit
 
 from aiohttp.web import Response, WebSocketResponse
 
@@ -22,12 +21,8 @@
     """This function takes the arguments passed to the request handler and
     uses them to generate a WSGI compatible environ dictionary.
     """
-    message = request._message
-    payload = request._payload
-
-    uri_parts = urlsplit(message.path)
     environ = {
-        'wsgi.input': payload,
+        'wsgi.input': request.content,
         'wsgi.errors': sys.stderr,
         'wsgi.version': (1, 0),
         'wsgi.async': True,
@@ -35,10 +30,10 @@
         'wsgi.multiprocess': False,
         'wsgi.run_once': False,
         'SERVER_SOFTWARE': 'aiohttp',
-        'REQUEST_METHOD': message.method,
-        'QUERY_STRING': uri_parts.query or '',
-        'RAW_URI': message.path,
-        'SERVER_PROTOCOL': 'HTTP/%s.%s' % message.version,
+        'REQUEST_METHOD': request.method,
+        'QUERY_STRING': request.query_string or '',
+        'RAW_URI': request.path_qs,
+        'SERVER_PROTOCOL': f'HTTP/{request.version[0]}.{request.version[1]}',
         'REMOTE_ADDR': '127.0.0.1',
         'REMOTE_PORT': '0',
         'SERVER_NAME': 'aiohttp',
@@ -46,7 +41,7 @@
         'aiohttp.request': request
     }
 
-    for hdr_name, hdr_value in message.headers.items():
+    for hdr_name, hdr_value in request.headers.items():
         hdr_name = hdr_name.upper()
         if hdr_name == 'CONTENT-TYPE':
             environ['CONTENT_TYPE'] = hdr_value
@@ -63,9 +58,7 @@
 
     environ['wsgi.url_scheme'] = environ.get('HTTP_X_FORWARDED_PROTO', 'http')
 
-    path_info = uri_parts.path
-
-    environ['PATH_INFO'] = path_info
+    environ['PATH_INFO'] = request.path
     environ['SCRIPT_NAME'] = ''
 
     return environ
@@ -105,7 +98,7 @@
             f = self._sock.send_bytes
         else:
             f = self._sock.send_str
-        if asyncio.iscoroutinefunction(f):
+        if inspect.iscoroutinefunction(f):
             await f(message)
         else:
             f(message)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-engineio-4.12.3/src/engineio/async_drivers/asgi.py 
new/python-engineio-4.13.0/src/engineio/async_drivers/asgi.py
--- old/python-engineio-4.12.3/src/engineio/async_drivers/asgi.py       
2025-09-28 08:29:18.000000000 +0200
+++ new/python-engineio-4.13.0/src/engineio/async_drivers/asgi.py       
2025-12-24 23:34:59.000000000 +0100
@@ -1,6 +1,6 @@
+import inspect
 import os
 import sys
-import asyncio
 
 from engineio.static_files import get_static_file
 
@@ -102,7 +102,7 @@
                 if self.on_startup:
                     try:
                         await self.on_startup() \
-                            if asyncio.iscoroutinefunction(self.on_startup) \
+                            if inspect.iscoroutinefunction(self.on_startup) \
                             else self.on_startup()
                     except:
                         await send({'type': 'lifespan.startup.failed'})
@@ -112,7 +112,7 @@
                 if self.on_shutdown:
                     try:
                         await self.on_shutdown() \
-                            if asyncio.iscoroutinefunction(self.on_shutdown) \
+                            if inspect.iscoroutinefunction(self.on_shutdown) \
                             else self.on_shutdown()
                     except:
                         await send({'type': 'lifespan.shutdown.failed'})
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-engineio-4.12.3/src/engineio/async_drivers/tornado.py 
new/python-engineio-4.13.0/src/engineio/async_drivers/tornado.py
--- old/python-engineio-4.12.3/src/engineio/async_drivers/tornado.py    
2025-09-28 08:29:18.000000000 +0200
+++ new/python-engineio-4.13.0/src/engineio/async_drivers/tornado.py    
2025-12-24 23:34:59.000000000 +0100
@@ -1,4 +1,5 @@
 import asyncio
+import inspect
 import sys
 from urllib.parse import urlsplit
 from .. import exceptions
@@ -24,7 +25,7 @@
         async def get(self, *args, **kwargs):
             if self.request.headers.get('Upgrade', '').lower() == 'websocket':
                 ret = super().get(*args, **kwargs)
-                if asyncio.iscoroutine(ret):
+                if inspect.iscoroutine(ret):
                     await ret
             else:
                 await engineio_server.handle_request(self)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-engineio-4.12.3/src/engineio/async_server.py 
new/python-engineio-4.13.0/src/engineio/async_server.py
--- old/python-engineio-4.12.3/src/engineio/async_server.py     2025-09-28 
08:29:18.000000000 +0200
+++ new/python-engineio-4.13.0/src/engineio/async_server.py     2025-12-24 
23:34:59.000000000 +0100
@@ -1,4 +1,5 @@
 import asyncio
+import inspect
 import urllib
 
 from . import base_server
@@ -212,7 +213,7 @@
         Note: this method is a coroutine.
         """
         translate_request = self._async['translate_request']
-        if asyncio.iscoroutinefunction(translate_request):
+        if inspect.iscoroutinefunction(translate_request):
             environ = await translate_request(*args, **kwargs)
         else:
             environ = translate_request(*args, **kwargs)
@@ -427,7 +428,7 @@
     async def _make_response(self, response_dict, environ):
         cors_headers = self._cors_headers(environ)
         make_response = self._async['make_response']
-        if asyncio.iscoroutinefunction(make_response):
+        if inspect.iscoroutinefunction(make_response):
             response = await make_response(
                 response_dict['status'],
                 response_dict['headers'] + cors_headers,
@@ -502,7 +503,7 @@
         run_async = kwargs.pop('run_async', False)
         ret = None
         if event in self.handlers:
-            if asyncio.iscoroutinefunction(self.handlers[event]):
+            if inspect.iscoroutinefunction(self.handlers[event]):
                 async def run_async_handler():
                     try:
                         try:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-engineio-4.12.3/src/engineio/client.py 
new/python-engineio-4.13.0/src/engineio/client.py
--- old/python-engineio-4.12.3/src/engineio/client.py   2025-09-28 
08:29:18.000000000 +0200
+++ new/python-engineio-4.13.0/src/engineio/client.py   2025-12-24 
23:34:59.000000000 +0100
@@ -1,11 +1,12 @@
 from base64 import b64encode
-from engineio.json import JSONDecodeError
+from http.cookies import SimpleCookie
 import logging
 import queue
 import ssl
 import threading
 import time
 import urllib
+from engineio.json import JSONDecodeError
 
 try:
     import requests
@@ -268,8 +269,10 @@
         extra_options = {}
         if self.http:
             # cookies
-            cookies = '; '.join([f"{cookie.name}={cookie.value}"
-                                 for cookie in self.http.cookies])
+            ck = SimpleCookie()
+            for cookie in self.http.cookies:
+                ck[cookie.name] = cookie.value
+            cookies = ck.output(header='', sep=';').strip()
             for header, value in headers.items():
                 if header.lower() == 'cookie':
                     if cookies:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-engineio-4.12.3/tests/async/test_aiohttp.py 
new/python-engineio-4.13.0/tests/async/test_aiohttp.py
--- old/python-engineio-4.12.3/tests/async/test_aiohttp.py      2025-09-28 
08:29:18.000000000 +0200
+++ new/python-engineio-4.13.0/tests/async/test_aiohttp.py      2025-12-24 
23:34:59.000000000 +0100
@@ -1,5 +1,8 @@
 from unittest import mock
 
+import yarl
+from aiohttp.web import Request
+
 from engineio.async_drivers import aiohttp as async_aiohttp
 
 
@@ -12,18 +15,28 @@
         app.router.add_post.assert_any_call('/foo', mock_server.handle_request)
 
     def test_translate_request(self):
-        request = mock.MagicMock()
-        request._message.method = 'PUT'
-        request._message.path = '/foo/bar?baz=1'
-        request._message.version = (1, 1)
-        request._message.headers = {
+        message = mock.MagicMock()
+        message.url = yarl.URL('https://example.com/foo/bar?baz=1')
+        message.method = 'PUT'
+        message.path = '/foo/bar?baz=1'
+        message.version = (1, 1)
+        message.headers = {
             'a': 'b',
             'c-c': 'd',
             'c_c': 'e',
             'content-type': 'application/json',
             'content-length': 123,
         }
-        request._payload = b'hello world'
+
+        request = Request(
+            message,
+            payload=b'hello world',
+            protocol=mock.MagicMock(),
+            payload_writer=mock.MagicMock(),
+            task=mock.MagicMock(),
+            loop=mock.MagicMock(),
+        )
+
         environ = async_aiohttp.translate_request(request)
         expected_environ = {
             'REQUEST_METHOD': 'PUT',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-engineio-4.12.3/tests/async/test_client.py 
new/python-engineio-4.13.0/tests/async/test_client.py
--- old/python-engineio-4.12.3/tests/async/test_client.py       2025-09-28 
08:29:18.000000000 +0200
+++ new/python-engineio-4.13.0/tests/async/test_client.py       2025-12-24 
23:34:59.000000000 +0100
@@ -24,6 +24,10 @@
         client.queue.put = mock.AsyncMock()
         client.queue.join = mock.AsyncMock()
 
+    @staticmethod
+    def mock_ws_timeout(ws_close):
+        return ws_close
+
     async def test_is_asyncio_based(self):
         c = async_client.AsyncClient()
         assert c.is_asyncio_based()
@@ -500,6 +504,8 @@
         assert c in base_client.connected_clients
 
     @mock.patch('engineio.client.time.time', return_value=123.456)
+    @mock.patch('engineio.async_client.aiohttp.ClientWSTimeout',
+                new=mock_ws_timeout)
     async def test_websocket_connection_failed(self, _time):
         c = async_client.AsyncClient()
         c.http = mock.MagicMock(closed=False)
@@ -541,6 +547,8 @@
         )
 
     @mock.patch('engineio.client.time.time', return_value=123.456)
+    @mock.patch('engineio.async_client.aiohttp.ClientWSTimeout',
+                new=mock_ws_timeout)
     async def test_websocket_upgrade_failed(self, _time):
         c = async_client.AsyncClient()
         c.http = mock.MagicMock(closed=False)
@@ -568,6 +576,8 @@
             await c.connect('http://foo', transports=['websocket'])
 
     @mock.patch('engineio.client.time.time', return_value=123.456)
+    @mock.patch('engineio.async_client.aiohttp.ClientWSTimeout',
+                new=mock_ws_timeout)
     async def test_websocket_connection_successful(self, _time):
         c = async_client.AsyncClient()
         c.http = mock.MagicMock(closed=False)
@@ -649,6 +659,8 @@
         assert kwargs['ssl'].verify_mode == ssl.CERT_NONE
 
     @mock.patch('engineio.client.time.time', return_value=123.456)
+    @mock.patch('engineio.async_client.aiohttp.ClientWSTimeout',
+                new=mock_ws_timeout)
     async def test_websocket_connection_with_cookies(self, _time):
         c = async_client.AsyncClient()
         c.http = mock.MagicMock(closed=False)
@@ -682,6 +694,8 @@
         )
 
     @mock.patch('engineio.client.time.time', return_value=123.456)
+    @mock.patch('engineio.async_client.aiohttp.ClientWSTimeout',
+                new=mock_ws_timeout)
     async def test_websocket_connection_with_cookie_header(self, _time):
         c = async_client.AsyncClient()
         c.http = mock.MagicMock(closed=False)
@@ -714,10 +728,12 @@
             timeout=5,
         )
         c.http.cookie_jar.update_cookies.assert_called_once_with(
-            {'key': 'value', 'key2': 'value2', 'key3': '"value3="'}
+            {'key': 'value', 'key2': 'value2', 'key3': 'value3='}
         )
 
     @mock.patch('engineio.client.time.time', return_value=123.456)
+    @mock.patch('engineio.async_client.aiohttp.ClientWSTimeout',
+                new=mock_ws_timeout)
     async def test_websocket_connection_with_cookies_and_headers(self, _time):
         c = async_client.AsyncClient()
         c.http = mock.MagicMock(closed=False)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-engineio-4.12.3/tox.ini 
new/python-engineio-4.13.0/tox.ini
--- old/python-engineio-4.12.3/tox.ini  2025-09-28 08:29:18.000000000 +0200
+++ new/python-engineio-4.13.0/tox.ini  2025-12-24 23:34:59.000000000 +0100
@@ -1,15 +1,14 @@
 [tox]
-envlist=flake8,py38,py39,py310,py311,py312,py313,pypy3,docs
+envlist=flake8,py310,py311,py312,py313,py314,pypy3,docs
 skip_missing_interpreters=True
 
 [gh-actions]
 python =
-    3.8: py38
-    3.9: py39
     3.10: py310
     3.11: py311
     3.12: py312
     3.13: py313
+    3.14: py314
     pypy-3: pypy3
 
 [testenv]

Reply via email to