summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorEthan Furman <ethan@stoneleaf.us>2020-12-08 19:14:10 (GMT)
committerGitHub <noreply@github.com>2020-12-08 19:14:10 (GMT)
commit37440eef7f9a0c27e13fc9ce0850574bb00688b0 (patch)
treeb96c61bc2d39bef6d78dc3c9506ad69304051a9f /Lib
parentc168b5078f88874b9acd993ac886f82269c780dd (diff)
downloadcpython-37440eef7f9a0c27e13fc9ce0850574bb00688b0.zip
cpython-37440eef7f9a0c27e13fc9ce0850574bb00688b0.tar.gz
cpython-37440eef7f9a0c27e13fc9ce0850574bb00688b0.tar.bz2
bpo-41907: [Enum] fix format() behavior for IntFlag (GH-22497)
Diffstat (limited to 'Lib')
-rw-r--r--Lib/enum.py2
-rw-r--r--Lib/test/test_enum.py14
2 files changed, 15 insertions, 1 deletions
diff --git a/Lib/enum.py b/Lib/enum.py
index d670ad7..484db2c 100644
--- a/Lib/enum.py
+++ b/Lib/enum.py
@@ -658,7 +658,7 @@ class Enum(metaclass=EnumMeta):
# the value
# pure Enum branch, or branch with __str__ explicitly overridden
- str_overridden = type(self).__str__ != Enum.__str__
+ str_overridden = type(self).__str__ not in (Enum.__str__, Flag.__str__)
if self._member_type_ is object or str_overridden:
cls = str
val = str(self)
diff --git a/Lib/test/test_enum.py b/Lib/test/test_enum.py
index d1dd2e7..f2171b5 100644
--- a/Lib/test/test_enum.py
+++ b/Lib/test/test_enum.py
@@ -585,12 +585,15 @@ class TestEnum(unittest.TestCase):
class Test1Enum(MyMethodEnum, int, MyStrEnum):
One = 1
Two = 2
+ self.assertTrue(Test1Enum._member_type_ is int)
self.assertEqual(str(Test1Enum.One), 'MyStr')
+ self.assertEqual(format(Test1Enum.One, ''), 'MyStr')
#
class Test2Enum(MyStrEnum, MyMethodEnum):
One = 1
Two = 2
self.assertEqual(str(Test2Enum.One), 'MyStr')
+ self.assertEqual(format(Test1Enum.One, ''), 'MyStr')
def test_inherited_data_type(self):
class HexInt(int):
@@ -2251,6 +2254,11 @@ class TestFlag(unittest.TestCase):
self.assertEqual(repr(~(Open.RO | Open.CE)), '<Open.AC: 3>')
self.assertEqual(repr(~(Open.WO | Open.CE)), '<Open.RW: 2>')
+ def test_format(self):
+ Perm = self.Perm
+ self.assertEqual(format(Perm.R, ''), 'Perm.R')
+ self.assertEqual(format(Perm.R | Perm.X, ''), 'Perm.R|X')
+
def test_or(self):
Perm = self.Perm
for i in Perm:
@@ -2590,6 +2598,7 @@ class TestIntFlag(unittest.TestCase):
def test_type(self):
Perm = self.Perm
+ self.assertTrue(Perm._member_type_ is int)
Open = self.Open
for f in Perm:
self.assertTrue(isinstance(f, Perm))
@@ -2669,6 +2678,11 @@ class TestIntFlag(unittest.TestCase):
self.assertEqual(repr(~(Open.WO | Open.CE)), '<Open.RW: -524290>')
self.assertEqual(repr(Open(~4)), '<Open.CE|AC|RW|WO: -5>')
+ def test_format(self):
+ Perm = self.Perm
+ self.assertEqual(format(Perm.R, ''), '4')
+ self.assertEqual(format(Perm.R | Perm.X, ''), '5')
+
def test_or(self):
Perm = self.Perm
for i in Perm: