From f2ccf7dc6d64008233974625b586445e681c9a96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20Gr=C3=B6nholm?= Date: Sat, 12 Aug 2023 20:55:15 +0300 Subject: [PATCH] Fixed get_callable_name() not working properly for built-in functions --- apscheduler/util.py | 4 ++-- tests/test_util.py | 8 +++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/apscheduler/util.py b/apscheduler/util.py index 86c00960..16f2baf6 100644 --- a/apscheduler/util.py +++ b/apscheduler/util.py @@ -6,7 +6,7 @@ from datetime import date, datetime, time, timedelta, tzinfo from calendar import timegm from functools import partial -from inspect import isclass, isfunction, ismethod +from inspect import isbuiltin, isclass, isfunction, ismethod import re import sys @@ -218,7 +218,7 @@ def get_callable_name(func): self = func.__self__ cls = self if isclass(self) else type(self) return f"{cls.__qualname__}.{func.__name__}" - elif isclass(func) or isfunction(func): + elif isclass(func) or isfunction(func) or isbuiltin(func): return func.__qualname__ elif hasattr(func, '__call__') and callable(func.__call__): # instance of a class with a __call__ method diff --git a/tests/test_util.py b/tests/test_util.py index 98f71d32..79dcf65b 100644 --- a/tests/test_util.py +++ b/tests/test_util.py @@ -1,3 +1,4 @@ +import os import platform import sys from datetime import date, datetime, timedelta, tzinfo @@ -176,6 +177,7 @@ def test_datetime_repr(input, expected): class TestGetCallableName(object): @pytest.mark.parametrize('input,expected', [ (asint, 'asint'), + (os.getpid, "getpid"), (DummyClass.staticmeth, 'DummyClass.staticmeth'), (DummyClass.classmeth, 'DummyClass.classmeth'), (DummyClass.meth, 'DummyClass.meth'), @@ -183,9 +185,9 @@ class TestGetCallableName(object): (DummyClass, 'DummyClass'), (DummyClass(), 'DummyClass'), (InheritedDummyClass.classmeth, "InheritedDummyClass.classmeth"), - (DummyClass.InnerDummyClass.innerclassmeth, "DummyClass.InnerDummyClass.innerclassmeth") - ], ids=['function', 'static method', 'class method', 'unbounded method', 'bounded method', - 'class', 'instance', "class method in inherited", "inner class method"]) + (DummyClass.InnerDummyClass.innerclassmeth, "DummyClass.InnerDummyClass.innerclassmeth"), + ], ids=['function', 'builtin', 'static method', 'class method', 'unbounded method', + 'bounded method', 'class', 'instance', "class method in inherited", "inner class method"]) def test_inputs(self, input, expected): assert get_callable_name(input) == expected