From 70cfe56cafb2b549983f63d5d1a54654fe63c15c Mon Sep 17 00:00:00 2001 From: Ethan Furman <ethan@stoneleaf.us> Date: Fri, 27 May 2022 15:14:28 -0700 Subject: [PATCH] gh-93250: [Enum] Change IntEnum boundary to KEEP for backwards compatibility (GH-93302) In previous versions of Python if an IntEnum member was combined with another integer type value using a bit-wise operation, the resulting value would still be the IntEnum type. This change restores that behavior. --- Lib/enum.py | 2 +- Lib/test/test_enum.py | 12 ++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/Lib/enum.py b/Lib/enum.py index 0b97d3d8a68..4261b117d9d 100644 --- a/Lib/enum.py +++ b/Lib/enum.py @@ -1572,7 +1572,7 @@ def __invert__(self): __rxor__ = __xor__ -class IntFlag(int, ReprEnum, Flag, boundary=EJECT): +class IntFlag(int, ReprEnum, Flag, boundary=KEEP): """ Support for integer-based Flags """ diff --git a/Lib/test/test_enum.py b/Lib/test/test_enum.py index 44a3912630c..25b3e2d8189 100644 --- a/Lib/test/test_enum.py +++ b/Lib/test/test_enum.py @@ -3353,7 +3353,10 @@ def test_invert(self): self.assertIs((Open.WO|Open.CE) & ~Open.WO, Open.CE) def test_boundary(self): - self.assertIs(enum.IntFlag._boundary_, EJECT) + self.assertIs(enum.IntFlag._boundary_, KEEP) + class Simple(IntFlag, boundary=KEEP): + SINGLE = 1 + # class Iron(IntFlag, boundary=STRICT): ONE = 1 TWO = 2 @@ -3372,7 +3375,6 @@ class Space(IntFlag, boundary=EJECT): EIGHT = 8 self.assertIs(Space._boundary_, EJECT) # - # class Bizarre(IntFlag, boundary=KEEP): b = 3 c = 4 @@ -3389,6 +3391,12 @@ class Bizarre(IntFlag, boundary=KEEP): self.assertEqual(list(Bizarre), [Bizarre.c]) self.assertIs(Bizarre(3), Bizarre.b) self.assertIs(Bizarre(6), Bizarre.d) + # + simple = Simple.SINGLE | Iron.TWO + self.assertEqual(simple, 3) + self.assertIsInstance(simple, Simple) + self.assertEqual(repr(simple), '<Simple.SINGLE|<Iron.TWO: 2>: 3>') + self.assertEqual(str(simple), '3') def test_iter(self): Color = self.Color -- GitLab