From b67de01f80d842e1237bd24062a08692cfb7f81c Mon Sep 17 00:00:00 2001 From: Shengyu Zhang Date: Sat, 13 Jan 2024 14:31:46 +0800 Subject: [PATCH] Use repr when Enum has custom __repr__ impl --- sphinx/util/inspect.py | 2 ++ tests/test_util_inspect.py | 11 +++++++++++ 2 files changed, 13 insertions(+) diff --git a/sphinx/util/inspect.py b/sphinx/util/inspect.py index 218f4abca21..c9aa92c7fc6 100644 --- a/sphinx/util/inspect.py +++ b/sphinx/util/inspect.py @@ -387,6 +387,8 @@ def object_description(obj: Any, *, _seen: frozenset = frozenset()) -> str: return 'frozenset({%s})' % ', '.join(object_description(x, _seen=seen) for x in sorted_values) elif isinstance(obj, enum.Enum): + if obj.__repr__.__func__ is not enum.Enum.__repr__: + return repr(obj) return f'{obj.__class__.__name__}.{obj.name}' elif isinstance(obj, tuple): if id(obj) in seen: diff --git a/tests/test_util_inspect.py b/tests/test_util_inspect.py index 73f96562f42..6ae6ac0a9b1 100644 --- a/tests/test_util_inspect.py +++ b/tests/test_util_inspect.py @@ -667,6 +667,17 @@ class MyEnum(enum.Enum): assert inspect.object_description(MyEnum.FOO) == "MyEnum.FOO" +def test_object_description_enum_custom_repr(): + class MyEnum(enum.Enum): + FOO = 1 + BAR = 2 + + def __repr__(self): + return self.name + + assert inspect.object_description(MyEnum.FOO) == "FOO" + + def test_getslots(): class Foo: pass