Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-eventlet for openSUSE:Factory 
checked in at 2026-04-08 17:13:20
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-eventlet (Old)
 and      /work/SRC/openSUSE:Factory/.python-eventlet.new.21863 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-eventlet"

Wed Apr  8 17:13:20 2026 rev:67 rq:1344793 version:0.41.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-eventlet/python-eventlet.changes  
2025-12-10 15:31:01.927521890 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-eventlet.new.21863/python-eventlet.changes   
    2026-04-08 17:13:24.334185912 +0200
@@ -1,0 +2,9 @@
+Mon Apr  6 20:51:11 UTC 2026 - Dirk Müller <[email protected]>
+
+- update to 0.41.0:
+  * Switch to 3.14 for testing (#1086)
+  * Drop 3.9 support (#1085)
+  * More visible deprecation (#1077)
+- update BuildRequires from pyproject.toml
+
+-------------------------------------------------------------------

Old:
----
  eventlet-0.40.4.tar.gz

New:
----
  eventlet-0.41.0.tar.gz

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

Other differences:
------------------
++++++ python-eventlet.spec ++++++
--- /var/tmp/diff_new_pack.S8QrOW/_old  2026-04-08 17:13:25.134218804 +0200
+++ /var/tmp/diff_new_pack.S8QrOW/_new  2026-04-08 17:13:25.138218969 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package python-eventlet
 #
-# Copyright (c) 2025 SUSE LLC
+# Copyright (c) 2026 SUSE LLC and contributors
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -18,14 +18,15 @@
 
 %{?sle15_python_module_pythons}
 Name:           python-eventlet
-Version:        0.40.4
+Version:        0.41.0
 Release:        0
 Summary:        Concurrent networking library for Python
 License:        MIT
 Group:          Development/Languages/Python
 URL:            https://eventlet.net
 Source:         
https://files.pythonhosted.org/packages/source/e/eventlet/eventlet-%{version}.tar.gz
-BuildRequires:  %{python_module hatch-vcs}
+BuildRequires:  %{python_module hatch-vcs >= 0.3}
+BuildRequires:  %{python_module hatchling >= 1.12.2}
 BuildRequires:  %{python_module pip}
 BuildRequires:  %{python_module wheel}
 BuildRequires:  fdupes

++++++ eventlet-0.40.4.tar.gz -> eventlet-0.41.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/eventlet-0.40.4/.github/workflows/test.yaml 
new/eventlet-0.41.0/.github/workflows/test.yaml
--- old/eventlet-0.40.4/.github/workflows/test.yaml     2020-02-02 
01:00:00.000000000 +0100
+++ new/eventlet-0.41.0/.github/workflows/test.yaml     2020-02-02 
01:00:00.000000000 +0100
@@ -30,12 +30,7 @@
       fail-fast: false
       matrix:
         include:
-          - { py: 3.9, toxenv: py39-epolls, os: ubuntu-latest }
-          - { py: 3.9, toxenv: py39-openssl, os: ubuntu-latest }
-          - { py: 3.9, toxenv: py39-poll, os: ubuntu-latest }
-          - { py: 3.9, toxenv: py39-selects, os: ubuntu-latest }
-          - { py: 3.9, toxenv: py39-dnspython1, os: ubuntu-latest }
-          - { py: 3.9, toxenv: py39-asyncio, os: ubuntu-latest }
+          - { py: "3.10", toxenv: py310-openssl, os: ubuntu-latest }
           - { py: "3.10", toxenv: py310-epolls, os: ubuntu-latest }
           - { py: "3.10", toxenv: py310-poll, os: ubuntu-latest }
           - { py: "3.10", toxenv: py310-selects, os: ubuntu-latest }
@@ -47,8 +42,8 @@
           - { py: "3.12", toxenv: py312-asyncio, os: ubuntu-latest }
           - { py: "3.13", toxenv: py313-epolls, os: ubuntu-latest }
           - { py: "3.13", toxenv: py313-asyncio, os: ubuntu-latest }
-          - { py: "3.14.0-rc.2", toxenv: py314-epolls, os: ubuntu-latest }
-          - { py: "3.14.0-rc.2", toxenv: py314-asyncio, os: ubuntu-latest }
+          - { py: "3.14", toxenv: py314-epolls, os: ubuntu-latest }
+          - { py: "3.14", toxenv: py314-asyncio, os: ubuntu-latest }
 
     steps:
       - name: install system packages
@@ -97,7 +92,7 @@
         include:
           - { py: "3.12", toxenv: py312-asyncio, ignore-error: false, os: 
macos-latest }
           - { py: "3.13", toxenv: py313-asyncio, ignore-error: false, os: 
macos-latest }
-          - { py: "3.14.0-rc.2", toxenv: py314-asyncio, ignore-error: false, 
os: macos-latest }
+          - { py: "3.14", toxenv: py314-asyncio, ignore-error: false, os: 
macos-latest }
           # This isn't working very well at the moment, but that might just be
           # tox config? In any case main focus is on asyncio so someone can
           # revisit separately.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/eventlet-0.40.4/NEWS new/eventlet-0.41.0/NEWS
--- old/eventlet-0.40.4/NEWS    2020-02-02 01:00:00.000000000 +0100
+++ new/eventlet-0.41.0/NEWS    2020-02-02 01:00:00.000000000 +0100
@@ -1,6 +1,13 @@
 Unreleased
 ==========
 
+0.41.0
+======
+
+* Switch to 3.14 for testing (#1086)
+* Drop 3.9 support (#1085)
+* More visible deprecation (#1077)
+
 0.40.4
 ======
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/eventlet-0.40.4/PKG-INFO new/eventlet-0.41.0/PKG-INFO
--- old/eventlet-0.40.4/PKG-INFO        2020-02-02 01:00:00.000000000 +0100
+++ new/eventlet-0.41.0/PKG-INFO        2020-02-02 01:00:00.000000000 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.4
 Name: eventlet
-Version: 0.40.4
+Version: 0.41.0
 Summary: Highly concurrent networking library
 Project-URL: Homepage, https://github.com/eventlet/eventlet
 Project-URL: History, https://github.com/eventlet/eventlet/blob/master/NEWS
@@ -19,7 +19,6 @@
 Classifier: Operating System :: POSIX
 Classifier: Programming Language :: Python
 Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.9
 Classifier: Programming Language :: Python :: 3.10
 Classifier: Programming Language :: Python :: 3.11
 Classifier: Programming Language :: Python :: 3.12
@@ -27,7 +26,7 @@
 Classifier: Programming Language :: Python :: 3.14
 Classifier: Topic :: Internet
 Classifier: Topic :: Software Development :: Libraries :: Python Modules
-Requires-Python: >=3.9
+Requires-Python: >=3.10
 Requires-Dist: dnspython>=1.15.0
 Requires-Dist: greenlet>=1.0
 Provides-Extra: dev
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/eventlet-0.40.4/doc/source/index.rst 
new/eventlet-0.41.0/doc/source/index.rst
--- old/eventlet-0.40.4/doc/source/index.rst    2020-02-02 01:00:00.000000000 
+0100
+++ new/eventlet-0.41.0/doc/source/index.rst    2020-02-02 01:00:00.000000000 
+0100
@@ -74,7 +74,7 @@
 Supported Python Versions
 =========================
 
-Currently supporting CPython 3.9+.
+Currently supporting CPython 3.10+.
 
 
 Concepts & References
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/eventlet-0.40.4/eventlet/__init__.py 
new/eventlet-0.41.0/eventlet/__init__.py
--- old/eventlet-0.40.4/eventlet/__init__.py    2020-02-02 01:00:00.000000000 
+0100
+++ new/eventlet-0.41.0/eventlet/__init__.py    2020-02-02 01:00:00.000000000 
+0100
@@ -98,6 +98,11 @@
 https://eventlet.readthedocs.io/en/latest/asyncio/migration.html
 """
 
+class EventletDeprecationWarning(Warning):
+    """
+    A DeprecationWarning that is more visible than the built-in one.
+    """
+
 # If we're running tests this adds extra output that messes up some assertions.
 if os.environ.get("EVENTLET_TESTS") is None:
-    warnings.warn(_DEPRECATED, DeprecationWarning, stacklevel=2)
+    warnings.warn(_DEPRECATED, EventletDeprecationWarning, stacklevel=2)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/eventlet-0.40.4/eventlet/_version.py 
new/eventlet-0.41.0/eventlet/_version.py
--- old/eventlet-0.40.4/eventlet/_version.py    2020-02-02 01:00:00.000000000 
+0100
+++ new/eventlet-0.41.0/eventlet/_version.py    2020-02-02 01:00:00.000000000 
+0100
@@ -1,5 +1,6 @@
-# file generated by setuptools-scm
+# file generated by vcs-versioning
 # don't change, don't track in version control
+from __future__ import annotations
 
 __all__ = [
     "__version__",
@@ -10,25 +11,14 @@
     "commit_id",
 ]
 
-TYPE_CHECKING = False
-if TYPE_CHECKING:
-    from typing import Tuple
-    from typing import Union
-
-    VERSION_TUPLE = Tuple[Union[int, str], ...]
-    COMMIT_ID = Union[str, None]
-else:
-    VERSION_TUPLE = object
-    COMMIT_ID = object
-
 version: str
 __version__: str
-__version_tuple__: VERSION_TUPLE
-version_tuple: VERSION_TUPLE
-commit_id: COMMIT_ID
-__commit_id__: COMMIT_ID
+__version_tuple__: tuple[int | str, ...]
+version_tuple: tuple[int | str, ...]
+commit_id: str | None
+__commit_id__: str | None
 
-__version__ = version = '0.40.4'
-__version_tuple__ = version_tuple = (0, 40, 4)
+__version__ = version = '0.41.0'
+__version_tuple__ = version_tuple = (0, 41, 0)
 
 __commit_id__ = commit_id = None
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/eventlet-0.40.4/eventlet/hubs/__init__.py 
new/eventlet-0.41.0/eventlet/hubs/__init__.py
--- old/eventlet-0.40.4/eventlet/hubs/__init__.py       2020-02-02 
01:00:00.000000000 +0100
+++ new/eventlet-0.41.0/eventlet/hubs/__init__.py       2020-02-02 
01:00:00.000000000 +0100
@@ -108,6 +108,8 @@
         except AttributeError:
             use_hub()
         hub = _threadlocal.hub = _threadlocal.Hub()
+        if hasattr(hub, "_post_initialize"):
+            hub._post_initialize()
     return hub
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/eventlet-0.40.4/eventlet/hubs/asyncio.py 
new/eventlet-0.41.0/eventlet/hubs/asyncio.py
--- old/eventlet-0.40.4/eventlet/hubs/asyncio.py        2020-02-02 
01:00:00.000000000 +0100
+++ new/eventlet-0.41.0/eventlet/hubs/asyncio.py        2020-02-02 
01:00:00.000000000 +0100
@@ -33,29 +33,42 @@
     def __init__(self):
         super().__init__()
 
+    def _post_initialize(self):
+        """
+        Split off, because some of this ends up calling get_hub() again and so
+        we end up with two Hubs.
+        """
         # Pre-emptively make sure we're using the right modules:
         _unmonkey_patch_asyncio_all()
 
         # The presumption is that eventlet is driving the event loop, so we
         # want a new one we control.
         import asyncio
-
         self.loop = asyncio.new_event_loop()
         asyncio.set_event_loop(self.loop)
         self.sleep_event = asyncio.Event()
 
+        # Allow post-fork() child to continue using the same event loop.
+        # This is a terrible idea.
         import asyncio.events
-        if hasattr(asyncio.events, "on_fork"):
-            # Allow post-fork() child to continue using the same event loop.
-            # This is a terrible idea.
-            asyncio.events.on_fork.__code__ = (lambda: None).__code__
-        else:
-            # On Python 3.9-3.11, there's a thread local we need to reset.
-            # Also a terrible idea.
-            def re_register_loop(loop=self.loop):
-                asyncio.events._set_running_loop(loop)
 
-            os.register_at_fork(after_in_child=re_register_loop)
+        def re_register_loop(loop=self.loop):
+            asyncio.events._set_running_loop(loop)
+
+        os.register_at_fork(after_in_child=re_register_loop)
+
+        import asyncio.tasks
+        if hasattr(asyncio.tasks, "_swap_current_task"):
+            task_to_restore = []
+
+            def re_register_task(task=task_to_restore, loop=self.loop):
+                if task_to_restore:
+                    asyncio.tasks._swap_current_task(loop, task_to_restore[0])
+
+            def store_task():
+                task_to_restore.append(asyncio.tasks.current_task())
+
+            os.register_at_fork(after_in_child=re_register_task, 
before=store_task)
 
     def add_timer(self, timer):
         """
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/eventlet-0.40.4/eventlet/patcher.py 
new/eventlet-0.41.0/eventlet/patcher.py
--- old/eventlet-0.40.4/eventlet/patcher.py     2020-02-02 01:00:00.000000000 
+0100
+++ new/eventlet-0.41.0/eventlet/patcher.py     2020-02-02 01:00:00.000000000 
+0100
@@ -4,7 +4,9 @@
     import _imp as imp
 except ImportError:
     import imp
+import asyncio as asyncio_module
 import importlib
+import pkgutil
 import sys
 
 try:
@@ -248,7 +250,7 @@
         import asyncio.base_futures
 
         if hasattr(asyncio.base_futures, "get_ident"):
-            asyncio.base_futures = original_module.get_ident
+            asyncio.base_futures.get_ident = original_module.get_ident
 
     # Asyncio uses these for its blocking thread pool:
     if to_unpatch in ("threading", "queue"):
@@ -265,37 +267,9 @@
                 concurrent.futures.thread.queue = original_module
 
     # Patch asyncio modules:
-    for module_name in [
-        "asyncio.base_events",
-        "asyncio.base_futures",
-        "asyncio.base_subprocess",
-        "asyncio.base_tasks",
-        "asyncio.constants",
-        "asyncio.coroutines",
-        "asyncio.events",
-        "asyncio.exceptions",
-        "asyncio.format_helpers",
-        "asyncio.futures",
-        "asyncio",
-        "asyncio.locks",
-        "asyncio.log",
-        "asyncio.mixins",
-        "asyncio.protocols",
-        "asyncio.queues",
-        "asyncio.runners",
-        "asyncio.selector_events",
-        "asyncio.sslproto",
-        "asyncio.staggered",
-        "asyncio.streams",
-        "asyncio.subprocess",
-        "asyncio.taskgroups",
-        "asyncio.tasks",
-        "asyncio.threads",
-        "asyncio.timeouts",
-        "asyncio.transports",
-        "asyncio.trsock",
-        "asyncio.unix_events",
-    ]:
+    modules = ["asyncio.{0}".format(name) for _, name, _ in 
pkgutil.walk_packages(asyncio_module.__path__)]
+    modules.append("asyncio")
+    for module_name in modules:
         try:
             module = importlib.import_module(module_name)
         except ImportError:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/eventlet-0.40.4/pyproject.toml 
new/eventlet-0.41.0/pyproject.toml
--- old/eventlet-0.40.4/pyproject.toml  2020-02-02 01:00:00.000000000 +0100
+++ new/eventlet-0.41.0/pyproject.toml  2020-02-02 01:00:00.000000000 +0100
@@ -17,7 +17,7 @@
 ]
 description = "Highly concurrent networking library"
 readme = "README.rst"
-requires-python = ">=3.9"
+requires-python = ">=3.10"
 license = {text = "MIT"}
 classifiers = [
     "Development Status :: 4 - Beta",
@@ -27,7 +27,6 @@
     "Operating System :: Microsoft :: Windows",
     "Operating System :: POSIX",
     "Programming Language :: Python :: 3",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/eventlet-0.40.4/tests/__init__.py 
new/eventlet-0.41.0/tests/__init__.py
--- old/eventlet-0.40.4/tests/__init__.py       2020-02-02 01:00:00.000000000 
+0100
+++ new/eventlet-0.41.0/tests/__init__.py       2020-02-02 01:00:00.000000000 
+0100
@@ -257,17 +257,6 @@
     raise OSError(errno.ENOENT, 'Command not found: %r' % command)
 
 
-def silence_warnings(func):
-    def wrapper(*args, **kw):
-        warnings.simplefilter('ignore', DeprecationWarning)
-        try:
-            return func(*args, **kw)
-        finally:
-            warnings.simplefilter('default', DeprecationWarning)
-    wrapper.__name__ = func.__name__
-    return wrapper
-
-
 def get_database_auth():
     """Retrieves a dict of connection parameters for connecting to test 
databases.
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/eventlet-0.40.4/tests/isolated/fork_in_main_thread.py 
new/eventlet-0.41.0/tests/isolated/fork_in_main_thread.py
--- old/eventlet-0.40.4/tests/isolated/fork_in_main_thread.py   2020-02-02 
01:00:00.000000000 +0100
+++ new/eventlet-0.41.0/tests/isolated/fork_in_main_thread.py   2020-02-02 
01:00:00.000000000 +0100
@@ -1,3 +1,7 @@
+import warnings
+# Suppress all warnings for this test to ensure clean output
+warnings.filterwarnings("ignore")
+
 import eventlet
 
 eventlet.monkey_patch()
@@ -43,5 +47,13 @@
 
 check_current()
 assert results == {"background", "forker"}, results
+
+# Make sure we can launch new threadlets:
+l = []
+t = threading.Thread(target=lambda: l.append(1))
+t.start()
+t.join()
+assert l == [1]
+
 if parent:
     print("pass")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/eventlet-0.40.4/tests/isolated/fork_in_thread.py 
new/eventlet-0.41.0/tests/isolated/fork_in_thread.py
--- old/eventlet-0.40.4/tests/isolated/fork_in_thread.py        2020-02-02 
01:00:00.000000000 +0100
+++ new/eventlet-0.41.0/tests/isolated/fork_in_thread.py        2020-02-02 
01:00:00.000000000 +0100
@@ -1,3 +1,7 @@
+import warnings
+# Suppress all warnings for this test to ensure clean output
+warnings.filterwarnings("ignore")
+
 import eventlet
 
 eventlet.monkey_patch()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/eventlet-0.40.4/tests/socket_test.py 
new/eventlet-0.41.0/tests/socket_test.py
--- old/eventlet-0.40.4/tests/socket_test.py    2020-02-02 01:00:00.000000000 
+0100
+++ new/eventlet-0.41.0/tests/socket_test.py    2020-02-02 01:00:00.000000000 
+0100
@@ -28,11 +28,12 @@
     def server():
         sock = eventlet.listen(('127.0.0.1', 0))
         addr[:] = sock.getsockname()
-        eventlet.sleep(0.2)
+        eventlet.sleep(1.0)
 
     server_thread = threading.Thread(target=server)
     server_thread.start()
-    eventlet.sleep(0.1)
+    eventlet.sleep(0.5)
+    assert addr, f"{addr} wasn't set by server?"
     sock = eventlet.connect(tuple(addr))
     s = sock.recv(1)
     assert isinstance(s, bytes)
@@ -48,11 +49,12 @@
     def server():
         sock = eventlet.listen(('127.0.0.1', 0))
         addr[:] = sock.getsockname()
-        eventlet.sleep(0.2)
+        eventlet.sleep(1.0)
 
     server_thread = threading.Thread(target=server)
     server_thread.start()
-    eventlet.sleep(0.1)
+    eventlet.sleep(0.5)
+    assert addr, f"{addr} wasn't set by server?"
     sock = eventlet.connect(tuple(addr))
     buf = array.array('B', b' ')
     res = sock.recv_into(buf, 1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/eventlet-0.40.4/tox.ini new/eventlet-0.41.0/tox.ini
--- old/eventlet-0.40.4/tox.ini 2020-02-02 01:00:00.000000000 +0100
+++ new/eventlet-0.41.0/tox.ini 2020-02-02 01:00:00.000000000 +0100
@@ -13,9 +13,8 @@
 envlist =
     ipv6
     pep8
-    py39-openssl
-    py39-dnspython1
-    py{39,310,311,312,313,314}-{selects,poll,epolls,asyncio}
+    py310-openssl
+    py{310,311,312,313,314}-{selects,poll,epolls,asyncio}
 skipsdist = True
 
 [testenv:ipv6]
@@ -68,14 +67,11 @@
     coverage
     pytest
     pytest-cov
-    py39-openssl: pyopenssl==22.1.0
+    py310-openssl: pyopenssl
     pypy3: psycopg2cffi-compat==1.1
-    py39-{selects,poll,epolls}: pyzmq==21.0.2
-    py{39,310,311}: mysqlclient==2.0.3
-    py39: psycopg2-binary==2.8.4
+    py{310,311}: mysqlclient==2.0.3
     py{310,311,312,313}: psycopg2-binary==2.9.10
     py{310,311,312,313,314}: pyzmq==27
-    dnspython1: dnspython<2
     asyncio: aiohttp
 usedevelop = True
 commands =

Reply via email to