Package: src:python-typeguard
Version: 4.4.4-3
User: [email protected]
Usertags: python3.15
Tags: patch

Hi!

While rebuilding the python related packages against the python version
3.15rc1 we found that python-typeguard fails to build from source[1].

The compatibility support for python 3.15 was added in the release 4.6.0
of python-typeguard, I'm attaching a backported version of the patch
that addes the compatibility support.

Please consider including this patch in your next upload or updating the
package to the new upstream releas.

Happy hacking,

[1]: 
https://debusine.debian.net/debian/r-python-python3.15/work-request/1081155/
--
"Can you imagine what I would do if I could do all I can?" -- Sun Tzu
Saludos /\/\ /\ >< `/
commit 2e63076a7bbdee0558f3a03f5a66e9f83b4e2241
Author: Tomáš Hrnčiar <[email protected]>
Date:   Sat May 23 13:04:39 2026 +0200

    Fixed compatibility with Python 3.15 (#554)

Index: python-typeguard/src/typeguard/_importhook.py
===================================================================
--- python-typeguard.orig/src/typeguard/_importhook.py
+++ python-typeguard/src/typeguard/_importhook.py
@@ -47,8 +47,8 @@ def _call_with_frames_removed(
     return f(*args, **kwargs)
 
 
-def optimized_cache_from_source(path: str, debug_override: bool | None = None) -> str:
-    return cache_from_source(path, debug_override, optimization=OPTIMIZATION)
+def optimized_cache_from_source(path: str) -> str:
+    return cache_from_source(path, optimization=OPTIMIZATION)
 
 
 class TypeguardLoader(SourceFileLoader):
@@ -56,6 +56,7 @@ class TypeguardLoader(SourceFileLoader):
     def source_to_code(
         data: Buffer | str | ast.Module | ast.Expression | ast.Interactive,
         path: Buffer | str | PathLike[str] = "<string>",
+        fullname: str | None = None,
     ) -> CodeType:
         if isinstance(data, (ast.Module, ast.Expression, ast.Interactive)):
             tree = data
@@ -65,12 +66,21 @@ class TypeguardLoader(SourceFileLoader):
             else:
                 source = decode_source(data)
 
-            tree = _call_with_frames_removed(
-                ast.parse,
-                source,
-                path,
-                "exec",
-            )
+            if sys.version_info >= (3, 15):
+                tree = _call_with_frames_removed(
+                    ast.parse,
+                    source,
+                    path,
+                    "exec",
+                    module=fullname,
+                )
+            else:
+                tree = _call_with_frames_removed(
+                    ast.parse,
+                    source,
+                    path,
+                    "exec",
+                )
 
         tree = TypeguardTransformer().visit(tree)
         ast.fix_missing_locations(tree)
@@ -84,9 +94,14 @@ class TypeguardLoader(SourceFileLoader):
             print(ast.unparse(tree), file=sys.stderr)
             print("----------------------------------------------", file=sys.stderr)
 
-        return _call_with_frames_removed(
-            compile, tree, path, "exec", 0, dont_inherit=True
-        )
+        if sys.version_info >= (3, 15):
+            return _call_with_frames_removed(
+                compile, tree, path, "exec", 0, dont_inherit=True, module=fullname
+            )
+        else:
+            return _call_with_frames_removed(
+                compile, tree, path, "exec", 0, dont_inherit=True
+            )
 
     def exec_module(self, module: ModuleType) -> None:
         # Use a custom optimization marker – the import lock should make this monkey
Index: python-typeguard/tests/dummymodule.py
===================================================================
--- python-typeguard.orig/tests/dummymodule.py
+++ python-typeguard/tests/dummymodule.py
@@ -17,7 +17,6 @@ from typing import (
     TypeVar,
     Union,
     no_type_check,
-    no_type_check_decorator,
     overload,
 )
 
@@ -41,6 +40,7 @@ P = ParamSpec("P")
 
 
 if sys.version_info <= (3, 13):
+    from typing import no_type_check_decorator
 
     @no_type_check_decorator
     def dummy_decorator(func):

Reply via email to