8000 bpo-41907: [Enum] fix format() behavior for IntFlag (GH-22497) (GH-23… · python/cpython@14eaa7d · GitHub
[go: up one dir, main page]

Skip to content

Commit 14eaa7d

Browse files
bpo-41907: [Enum] fix format() behavior for IntFlag (GH-22497) (GH-23703)
(cherry picked from commit 37440ee)
1 parent a3a4bf3 commit 14eaa7d

File tree

3 files changed

+16
-1
lines changed

3 files changed

+16
-1
lines changed

Lib/enum.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -657,7 +657,7 @@ def __format__(self, format_spec):
657657
# the value
658658

659659
# pure Enum branch, or branch with __str__ explicitly overridden
660-
str_overridden = type(self).__str__ != Enum.__str__
660+
str_overridden = type(self).__str__ not in (Enum.__str__, Flag.__str__)
661661
if self._member_type_ is object or str_overridden:
662662
cls = str
663663
val = str(self)

Lib/test/test_enum.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -570,12 +570,15 @@ def hello(self):
570570
class Test1Enum(MyMethodEnum, int, MyStrEnum):
571571
One = 1
572572
Two = 2
573+
self.assertTrue(Test1Enum._member_type_ is int)
573574
self.assertEqual(str(Test1Enum.One), 'MyStr')
575+
self.assertEqual(format(Test1Enum.One, ''), 'MyStr')
574576
#
575577
class Test2Enum(MyStrEnum, MyMethodEnum):
576578
One = 1
577579
Two = 2
578580
self.assertEqual(str(Test2Enum.One), 'MyStr')
581+
self.assertEqual(format(Test1Enum.One, ''), 'MyStr')
579582

580583
def test_inherited_data_type(self):
581584
class HexInt(int):
@@ -2170,6 +2173,11 @@ def test_repr(self):
21702173
self.assertEqual(repr(~(Open.RO | Open.CE)), '<Open.AC: 3>')
21712174
self.assertEqual(repr(~(Open.WO | Open.CE)), '<Open.RW: 2>')
21722175

2176+
def test_format(self):
2177+
Perm = self.Perm
2178+
self.assertEqual(format(Perm.R, ''), 'Perm.R')
2179+
self.assertEqual(format(Perm.R | Perm.X, ''), 'Perm.R|X')
2180+
21732181
def test_or(self):
21742182
Perm = self.Perm
21752183
for i in Perm:
@@ -2503,6 +2511,7 @@ class Color(IntFlag):
25032511

25042512
def test_type(self):
25052513
Perm = self.Perm
2514+
self.assertTrue(Perm._member_type_ is int)
25062515
Open = self.Open
25072516
for f in Perm:
25082517
self.assertTrue(isinstance(f, Perm))
@@ -2582,6 +2591,11 @@ def test_repr(self):
25822591
self.assertEqual(repr(~(Open.WO | Open.CE)), '<Open.RW: -524290>')
25832592
self.assertEqual(repr(Open(~4)), '<Open.CE|AC|RW|WO: -5>')
25842593

2594+
def test_format(self):
2595+
Perm = self.Perm
2596+
self.assertEqual(format(Perm.R, ''), '4')
2597+
self.assertEqual(format(Perm.R | Perm.X, ''), '5')
2598+
25852599
def test_or(self):
25862600
Perm = self.Perm
25872601
for i in Perm:
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
fix `format()` behavior for `IntFlag`

0 commit comments

Comments
 (0)
0