]> git.ipfire.org Git - thirdparty/starlette.git/commitdiff
Fix `routing.get_name()` not to assume all routines have `__name__` (#2648)
authorMichał Górny <mgorny@gentoo.org>
Wed, 24 Jul 2024 08:23:59 +0000 (10:23 +0200)
committerGitHub <noreply@github.com>
Wed, 24 Jul 2024 08:23:59 +0000 (02:23 -0600)
Fix `routing.get_name()` to use the `__name__` attribute only if it is
actually present, rather than assuming that all routine and class types
have it, and use the fallback to class name otherwise.  This is
necessary for `functools.partial()` that doesn't have a `__name__`
attribute, but is recognized as a routine starting with Python 3.13.0b3.
Since for older versions of Python, it would have used the fallback
anyway, this doesn't really change the behavior there.

Fixes #2638

starlette/routing.py

index 75a5ec3f3f48902247d15be00770f4e89c7d31ad..481b13f5d91950d23c5762bb5463326b15840102 100644 (file)
@@ -99,9 +99,7 @@ def websocket_session(
 
 
 def get_name(endpoint: typing.Callable[..., typing.Any]) -> str:
-    if inspect.isroutine(endpoint) or inspect.isclass(endpoint):
-        return endpoint.__name__
-    return endpoint.__class__.__name__
+    return getattr(endpoint, "__name__", endpoint.__class__.__name__)
 
 
 def replace_params(