Skip to content

Commit 17d06ae

Browse files
ethanfurmantomasr8
andauthored
gh-131045: [Enum] fix flag containment checks when using values (GH-131053)
Check would fail if value would create a pseudo-member, but that member had not yet been created. We now attempt to create a pseudo-member for a passed-in value first. Co-authored-by: Tomas R. <tomas.roun8@gmail.com>
1 parent db6a998 commit 17d06ae

File tree

3 files changed

+7
-2
lines changed

3 files changed

+7
-2
lines changed

Lib/enum.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -739,12 +739,14 @@ def __contains__(cls, value):
739739
`value` is in `cls` if:
740740
1) `value` is a member of `cls`, or
741741
2) `value` is the value of one of the `cls`'s members.
742+
3) `value` is a pseudo-member (flags)
742743
"""
743744
if isinstance(value, cls):
744745
return True
745746
try:
746-
return value in cls._value2member_map_
747-
except TypeError:
747+
cls(value)
748+
return True
749+
except ValueError:
748750
return (
749751
value in cls._unhashable_values_ # both structures are lists
750752
or value in cls._hashable_values_

Lib/test/test_enum.py

+2
Original file line numberDiff line numberDiff line change
@@ -462,6 +462,7 @@ def test_basics(self):
462462
self.assertEqual(str(TE), "<flag 'MainEnum'>")
463463
self.assertEqual(format(TE), "<flag 'MainEnum'>")
464464
self.assertTrue(TE(5) is self.dupe2)
465+
self.assertTrue(7 in TE)
465466
else:
466467
self.assertEqual(repr(TE), "<enum 'MainEnum'>")
467468
self.assertEqual(str(TE), "<enum 'MainEnum'>")
@@ -4954,6 +4955,7 @@ class Color(enum.Enum)
49544955
| `value` is in `cls` if:
49554956
| 1) `value` is a member of `cls`, or
49564957
| 2) `value` is the value of one of the `cls`'s members.
4958+
| 3) `value` is a pseudo-member (flags)
49574959
|
49584960
| __getitem__(name)
49594961
| Return the member matching `name`.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fix issue with ``__contains__``, values, and pseudo-members for :class:`enum.Flag`.

0 commit comments

Comments
 (0)