From 2136494abad5c481633a2aa5d5c290222c2de02b Mon Sep 17 00:00:00 2001 From: Dong-hee Na Date: Thu, 9 Mar 2023 23:04:50 +0900 Subject: [PATCH 1/3] gh-102558: Fix AttributeError or repr() of enum member --- Lib/enum.py | 2 ++ Lib/test/test_enum.py | 10 +++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/Lib/enum.py b/Lib/enum.py index d14e91a9b017d1..ba927662a43b13 100644 --- a/Lib/enum.py +++ b/Lib/enum.py @@ -1186,6 +1186,8 @@ def _missing_(cls, value): return None def __repr__(self): + if not isinstance(self, Enum): + return repr(self) v_repr = self.__class__._value_repr_ or repr return "<%s.%s: %s>" % (self.__class__.__name__, self._name_, v_repr(self._value_)) diff --git a/Lib/test/test_enum.py b/Lib/test/test_enum.py index 2b14590b2c21af..6c3d9b4fc2e494 100644 --- a/Lib/test/test_enum.py +++ b/Lib/test/test_enum.py @@ -11,7 +11,7 @@ import builtins as bltns from collections import OrderedDict from datetime import date -from enum import Enum, IntEnum, StrEnum, EnumType, Flag, IntFlag, unique, auto +from enum import Enum, EnumMeta, IntEnum, StrEnum, EnumType, Flag, IntFlag, unique, auto from enum import STRICT, CONFORM, EJECT, KEEP, _simple_enum, _test_simple_enum from enum import verify, UNIQUE, CONTINUOUS, NAMED_FLAGS, ReprEnum from enum import member, nonmember, _iter_bits_lsb @@ -2893,6 +2893,14 @@ def __new__(cls, c): self.assertEqual(FlagFromChar.a, 158456325028528675187087900672) self.assertEqual(FlagFromChar.a|1, 158456325028528675187087900673) + def test_multiple_superclasses(self): + class _EnumSuperClass(metaclass=EnumMeta): + pass + class E(_EnumSuperClass, Enum): + A=1 + self.assertEqual(format(E.A), "E.A") + + class TestOrder(unittest.TestCase): "test usage of the `_order_` attribute" From ffa20484dfcd3e542d3fb76137160abc2a1f98a0 Mon Sep 17 00:00:00 2001 From: Dong-hee Na Date: Sat, 11 Mar 2023 22:59:00 +0900 Subject: [PATCH 2/3] Fix test --- Lib/test/test_enum.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/test/test_enum.py b/Lib/test/test_enum.py index 6c3d9b4fc2e494..c168fe6c4fe4a6 100644 --- a/Lib/test/test_enum.py +++ b/Lib/test/test_enum.py @@ -2898,7 +2898,7 @@ class _EnumSuperClass(metaclass=EnumMeta): pass class E(_EnumSuperClass, Enum): A=1 - self.assertEqual(format(E.A), "E.A") + self.assertEqual(repr(E.A), "") class TestOrder(unittest.TestCase): From 38b083b3f3c0166259dcedfea226d39913f1e1a7 Mon Sep 17 00:00:00 2001 From: Dong-hee Na Date: Sun, 12 Mar 2023 14:28:35 +0900 Subject: [PATCH 3/3] Address code review --- Lib/test/test_enum.py | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/Lib/test/test_enum.py b/Lib/test/test_enum.py index c168fe6c4fe4a6..52cfc6c8f84609 100644 --- a/Lib/test/test_enum.py +++ b/Lib/test/test_enum.py @@ -644,6 +644,13 @@ class MySubEnum(MyEnum): theother = auto() self.assertEqual(repr(MySubEnum.that), "My name is that.") + def test_multiple_superclasses_repr(self): + class _EnumSuperClass(metaclass=EnumMeta): + pass + class E(_EnumSuperClass, Enum): + A = 1 + self.assertEqual(repr(E.A), "") + def test_reversed_iteration_order(self): self.assertEqual( list(reversed(self.MainEnum)), @@ -2893,14 +2900,6 @@ def __new__(cls, c): self.assertEqual(FlagFromChar.a, 158456325028528675187087900672) self.assertEqual(FlagFromChar.a|1, 158456325028528675187087900673) - def test_multiple_superclasses(self): - class _EnumSuperClass(metaclass=EnumMeta): - pass - class E(_EnumSuperClass, Enum): - A=1 - self.assertEqual(repr(E.A), "") - - class TestOrder(unittest.TestCase): "test usage of the `_order_` attribute"