[Python-checkins] bpo-41907: [Enum] fix format() behavior for IntFlag (GH-22497) (GH-23704)
ethanfurman
webhook-mailer at python.org
Tue Dec 8 14:53:07 EST 2020
https://github.com/python/cpython/commit/cbfcc67170d459bcf3e9d63d2f44eadec740bf69
commit: cbfcc67170d459bcf3e9d63d2f44eadec740bf69
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com>
committer: ethanfurman <ethan at stoneleaf.us>
date: 2020-12-08T11:52:58-08:00
summary:
bpo-41907: [Enum] fix format() behavior for IntFlag (GH-22497) (GH-23704)
(cherry picked from commit 37440eef7f9a0c27e13fc9ce0850574bb00688b0)
files:
A Misc/NEWS.d/next/Library/2020-10-02-10-19-49.bpo-41907.wiIEsz.rst
M Lib/enum.py
M Lib/test/test_enum.py
diff --git a/Lib/enum.py b/Lib/enum.py
index da809e2689114..da0657f66ce62 100644
--- a/Lib/enum.py
+++ b/Lib/enum.py
@@ -663,7 +663,7 @@ def __format__(self, format_spec):
# 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 7f6e6bf092b6f..484a2de6a9a6e 100644
--- a/Lib/test/test_enum.py
+++ b/Lib/test/test_enum.py
@@ -569,12 +569,15 @@ def hello(self):
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):
@@ -2172,6 +2175,11 @@ def test_repr(self):
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:
@@ -2504,6 +2512,7 @@ class Color(IntFlag):
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))
@@ -2583,6 +2592,11 @@ def test_repr(self):
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:
diff --git a/Misc/NEWS.d/next/Library/2020-10-02-10-19-49.bpo-41907.wiIEsz.rst b/Misc/NEWS.d/next/Library/2020-10-02-10-19-49.bpo-41907.wiIEsz.rst
new file mode 100644
index 0000000000000..aa337b38046e6
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2020-10-02-10-19-49.bpo-41907.wiIEsz.rst
@@ -0,0 +1 @@
+fix `format()` behavior for `IntFlag`
More information about the Python-checkins
mailing list