summaryrefslogtreecommitdiff
path: root/django/utils
diff options
context:
space:
mode:
authorPatrick Rauscher <Patrick.Rauscher@deutschebahn.com>2025-10-30 10:13:14 +0100
committerJacob Walls <jacobtylerwalls@gmail.com>2025-10-31 08:44:37 -0400
commit601914722956cc41f1f2c53972d669ddee6ffc04 (patch)
tree7371c74ba37e07ff28b9e592163c5765c605d2f8 /django/utils
parent340e4f832e1ea74a27770e38635bbc781979f2e0 (diff)
Fixed #36696 -- Fixed NameError when inspecting functions with deferred annotations.
In Python 3.14, annotations are deferred by default, so we should not assume that the names in them have been imported unconditionally.
Diffstat (limited to 'django/utils')
-rw-r--r--django/utils/inspect.py16
1 files changed, 15 insertions, 1 deletions
diff --git a/django/utils/inspect.py b/django/utils/inspect.py
index 31f3cf994b..ac5e82ca14 100644
--- a/django/utils/inspect.py
+++ b/django/utils/inspect.py
@@ -1,10 +1,24 @@
import functools
import inspect
+from django.utils.version import PY314
+
+if PY314:
+ import annotationlib
+
@functools.lru_cache(maxsize=512)
def _get_func_parameters(func, remove_first):
- parameters = tuple(inspect.signature(func).parameters.values())
+ # As the annotations are not used in any case, inspect the signature with
+ # FORWARDREF to leave any deferred annotations unevaluated.
+ if PY314:
+ signature = inspect.signature(
+ func, annotation_format=annotationlib.Format.FORWARDREF
+ )
+ else:
+ signature = inspect.signature(func)
+
+ parameters = tuple(signature.parameters.values())
if remove_first:
parameters = parameters[1:]
return parameters