From c172a4760fc7fd17079b5164eb1c7329f02a89ef Mon Sep 17 00:00:00 2001 From: Ethan Furman Date: Tue, 15 Jun 2021 11:38:15 -0700 Subject: [PATCH 1/4] [3.10] [Enum] improve test, add andrei kulakov to ACKS (GH-26726). (cherry picked from commit cb2014f2077c92c35486bf0db7e646a68478a7a5) Co-authored-by: Ethan Furman --- Doc/library/enum.rst | 2 +- Lib/test/test_enum.py | 23 +++++++++++++++++++++++ Misc/ACKS | 1 + 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/Doc/library/enum.rst b/Doc/library/enum.rst index 2d19ef6f25657be..5e9cd79232df5e8 100644 --- a/Doc/library/enum.rst +++ b/Doc/library/enum.rst @@ -576,7 +576,7 @@ Data Types ... NEON = 31 Traceback (most recent call last): ... - ValueError: invalid Flag 'Color': 'WHITE' is missing a named flag for value 8; 'NEON' is missing named flags for values 8, 16 + ValueError: invalid Flag 'Color': aliases WHITE and NEON are missing combined values of 0x18 [use `enum.show_flag_values(value)` for details] .. note:: diff --git a/Lib/test/test_enum.py b/Lib/test/test_enum.py index 956b8347b1e1cb9..4626c2435c1ab63 100644 --- a/Lib/test/test_enum.py +++ b/Lib/test/test_enum.py @@ -660,12 +660,35 @@ def __repr__(self): self.assertEqual(repr(MyEnum.A), '') # class SillyInt(HexInt): + __qualname__ = 'SillyInt' pass class MyOtherEnum(SillyInt, enum.Enum): + __qualname__ = 'MyOtherEnum' D = 4 E = 5 F = 6 self.assertIs(MyOtherEnum._member_type_, SillyInt) + globals()['SillyInt'] = SillyInt + globals()['MyOtherEnum'] = MyOtherEnum + test_pickle_dump_load(self.assertIs, MyOtherEnum.E) + test_pickle_dump_load(self.assertIs, MyOtherEnum) + # + # This did not work in 3.9, but does now with pickling by name + class UnBrokenInt(int): + __qualname__ = 'UnBrokenInt' + def __new__(cls, value): + return int.__new__(cls, value) + class MyUnBrokenEnum(UnBrokenInt, Enum): + __qualname__ = 'MyUnBrokenEnum' + G = 7 + H = 8 + I = 9 + self.assertIs(MyUnBrokenEnum._member_type_, UnBrokenInt) + self.assertIs(MyUnBrokenEnum(7), MyUnBrokenEnum.G) + globals()['UnBrokenInt'] = UnBrokenInt + globals()['MyUnBrokenEnum'] = MyUnBrokenEnum + test_pickle_dump_load(self.assertIs, MyUnBrokenEnum.I) + test_pickle_dump_load(self.assertIs, MyUnBrokenEnum) def test_too_many_data_types(self): with self.assertRaisesRegex(TypeError, 'too many data types'): diff --git a/Misc/ACKS b/Misc/ACKS index 0cb738b3a12ee4c..b1bd33aaa35cf52 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -970,6 +970,7 @@ Andrew Kuchling Jakub Kuczys Dave Kuhlman Jon Kuhn +Andrei Kulakov Ilya Kulakov Upendra Kumar Toshio Kuratomi From 0cf7500e2d897cd231a9f07ba2eb2883bc60876c Mon Sep 17 00:00:00 2001 From: Ethan Furman Date: Tue, 15 Jun 2021 17:01:06 -0700 Subject: [PATCH 2/4] remove back-ticks from example --- Doc/library/enum.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Doc/library/enum.rst b/Doc/library/enum.rst index 5e9cd79232df5e8..077a35453ae4ce0 100644 --- a/Doc/library/enum.rst +++ b/Doc/library/enum.rst @@ -576,7 +576,7 @@ Data Types ... NEON = 31 Traceback (most recent call last): ... - ValueError: invalid Flag 'Color': aliases WHITE and NEON are missing combined values of 0x18 [use `enum.show_flag_values(value)` for details] + ValueError: invalid Flag 'Color': aliases WHITE and NEON are missing combined values of 0x18 [use enum.show_flag_values(value) for details] .. note:: From acae993b689f3c77b752f386e83cbe11d8c5073f Mon Sep 17 00:00:00 2001 From: Ethan Furman Date: Tue, 15 Jun 2021 17:10:25 -0700 Subject: [PATCH 3/4] update code to match docs --- Lib/enum.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/enum.py b/Lib/enum.py index 49c46ea86dbacfa..90777988dd041d1 100644 --- a/Lib/enum.py +++ b/Lib/enum.py @@ -1637,7 +1637,7 @@ def __call__(self, enumeration): else: value = 'combined values of 0x%x' % missing_value raise ValueError( - 'invalid Flag %r: %s %s [use `enum.show_flag_values(value)` for details]' + 'invalid Flag %r: %s %s [use enum.show_flag_values(value) for details]' % (cls_name, alias, value) ) return enumeration From 5bd522a827a1dee419d104fd22bdb9067f897410 Mon Sep 17 00:00:00 2001 From: Ethan Furman Date: Tue, 15 Jun 2021 18:03:32 -0700 Subject: [PATCH 4/4] fix tests --- Lib/test/test_enum.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Lib/test/test_enum.py b/Lib/test/test_enum.py index 4626c2435c1ab63..c4c458e6bfc4ef4 100644 --- a/Lib/test/test_enum.py +++ b/Lib/test/test_enum.py @@ -3614,7 +3614,7 @@ class Bizarre(Flag): self.assertEqual(Bizarre.d.value, 6) with self.assertRaisesRegex( ValueError, - "invalid Flag 'Bizarre': aliases b and d are missing combined values of 0x3 .use `enum.show_flag_values.value.` for details.", + "invalid Flag 'Bizarre': aliases b and d are missing combined values of 0x3 .use enum.show_flag_values.value. for details.", ): @verify(NAMED_FLAGS) class Bizarre(Flag): @@ -3633,7 +3633,7 @@ class Bizarre(IntFlag): self.assertEqual(Bizarre.d.value, 6) with self.assertRaisesRegex( ValueError, - "invalid Flag 'Bizarre': alias d is missing value 0x2 .use `enum.show_flag_values.value.` for details.", + "invalid Flag 'Bizarre': alias d is missing value 0x2 .use enum.show_flag_values.value. for details.", ): @verify(NAMED_FLAGS) class Bizarre(IntFlag):