Skip to content

Commit

Permalink
Fix routing.get_name() not to assume all routines have __name__ (#…
Browse files Browse the repository at this point in the history
…2648)

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
  • Loading branch information
mgorny authored Jul 24, 2024
1 parent 921f137 commit 07427f8
Showing 1 changed file with 1 addition and 3 deletions.
4 changes: 1 addition & 3 deletions starlette/routing.py
Original file line number Diff line number Diff line change
Expand Up @@ -99,9 +99,7 @@ async def app(scope: Scope, receive: Receive, send: Send) -> None:


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(
Expand Down

0 comments on commit 07427f8

Please sign in to comment.