Package: src:python-anyio
Version: 4.12.1-3
User: [email protected]
Usertags: python3.15
Tags: patch, ftbfs, forky, sid

Hi!

While rebuilding the python related packages against the Python 3.15rc1
version we found that python-anyio fails to build from source [1].
I backported the relevant parts of the upstream commits that add support
for 3.15 [2] [3]. Note that upstream disables blockbuster in the
pyproject.toml, but that doesn't work for our builds. Also, blockbuster
will get support for python 3.15 once forbiddenfruit add it[5].

I applied the upstream fixes in the sandbox [4] to be able to build the
packages that depend on python-anyio, please consider applying the
patches to support the upcoming 3.15 version.

Happy hacking,

[1]: 
https://debusine.debian.net/debian/r-python-python3.15/work-request/1113809/
[2]: 
https://github.com/agronholm/anyio/commit/2370032396438b0279bacb3ff2f5c4ae2886f0d0
[3]: 
https://github.com/agronholm/anyio/commit/25b417fb497f1af25487cdcb7a89fe1e5f91b59d
[4]: https://debusine.debian.net/debian/r-python-python3.15/
[5]: https://github.com/clarete/forbiddenfruit/pull/86
--
"Can you imagine what I would do if I could do all I can?" -- Sun Tzu
Saludos /\/\ /\ >< `/
From: Alex Grönholm <[email protected]>
Date: Wed, 3 Jun 2026 19:40:04 +0300
Subject: Added Python 3.15 support (#1159)

Blockbuster does not yet work on 3.15, so it was disabled for that version.
Uvloop doesn't work with 3.15 yet either.
Origin: upstream, https://github.com/agronholm/anyio/commit/2370032396438b0279bacb3ff2f5c4ae2886f0d0

Index: python-anyio/pyproject.toml
===================================================================
--- python-anyio.orig/pyproject.toml
+++ python-anyio/pyproject.toml
@@ -124,6 +124,8 @@ filterwarnings = [
     "ignore:unclosed transport <_ProactorSocketTransport.*:ResourceWarning",
     # Workaround for Python 3.9.7 (see https://bugs.python.org/issue45097)
     "ignore:The loop argument is deprecated since Python 3\\.8, and scheduled for removal in Python 3\\.10\\.:DeprecationWarning:asyncio",
+    # Ignore deprecation warning occurring under coverage.py on Python 3.15
+    "ignore:Module globals; __loader__ != __spec__.loader:DeprecationWarning:",
 ]
 markers = [
     "network: marks tests as requiring Internet access",
Index: python-anyio/tests/conftest.py
===================================================================
--- python-anyio.orig/tests/conftest.py
+++ python-anyio/tests/conftest.py
@@ -89,6 +89,10 @@ for backend_name in get_all_backends():
 
 @pytest.fixture(autouse=True)
 def blockbuster() -> Iterator[BlockBuster | None]:
+    if sys.version_info >= (3, 15):
+        yield None
+        return
+
     try:
         from blockbuster import blockbuster_ctx
     except ImportError:
From: Varun Chawla <[email protected]>
Date: Sun, 8 Feb 2026 14:00:48 -0800
Subject: Handled Python 3.15 path API changes (#1065)

- Conditionally remove is_reserved() on Python 3.15+ (removed in CPython)
- Add __vfspath__() on Python 3.15+ (new in CPython)
- Skip test_is_reserved on Python 3.15+

Fixes #1061.
Origin: upstream, https://github.com/agronholm/anyio/commit/25b417fb497f1af25487cdcb7a89fe1e5f91b59d

Index: python-anyio/src/anyio/_core/_fileio.py
===================================================================
--- python-anyio.orig/src/anyio/_core/_fileio.py
+++ python-anyio/src/anyio/_core/_fileio.py
@@ -301,6 +301,11 @@ class Path:
     def __fspath__(self) -> str:
         return self._path.__fspath__()
 
+    if sys.version_info >= (3, 15):
+
+        def __vfspath__(self) -> str:
+            return self._path.__vfspath__()
+
     def __str__(self) -> str:
         return self._path.__str__()
 
@@ -561,8 +566,10 @@ class Path:
             os.path.ismount, self._path, abandon_on_cancel=True
         )
 
-    def is_reserved(self) -> bool:
-        return self._path.is_reserved()
+    if sys.version_info < (3, 15):
+
+        def is_reserved(self) -> bool:
+            return self._path.is_reserved()
 
     async def is_socket(self) -> bool:
         return await to_thread.run_sync(self._path.is_socket, abandon_on_cancel=True)
Index: python-anyio/tests/test_fileio.py
===================================================================
--- python-anyio.orig/tests/test_fileio.py
+++ python-anyio/tests/test_fileio.py
@@ -302,6 +302,10 @@ class TestPath:
         assert not await Path("/gfobj4ewiotj").is_mount()
         assert await Path("/").is_mount()
 
+    @pytest.mark.skipif(
+        sys.version_info >= (3, 15),
+        reason="is_reserved() was removed in Python 3.15",
+    )
     @pytest.mark.filterwarnings("ignore::DeprecationWarning")
     def test_is_reserved(self) -> None:
         expected_result = platform.system() == "Windows"

Reply via email to