Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
gh-131045: [Enum] fix flag containment checks when using values (GH-1…
…31053)

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.
(cherry picked from commit 17d06ae)

Co-authored-by: Ethan Furman <ethan@stoneleaf.us>
Co-authored-by: Tomas R. <tomas.roun8@gmail.com>
  • Loading branch information
2 people authored and miss-islington committed Mar 12, 2025
commit e42b35c6346d6338333848b4ac27ed5a57746ac0
6 changes: 4 additions & 2 deletions Lib/enum.py
Original file line number Diff line number Diff line change
Expand Up @@ -746,12 +746,14 @@ def __contains__(cls, value):
`value` is in `cls` if:
1) `value` is a member of `cls`, or
2) `value` is the value of one of the `cls`'s members.
3) `value` is a pseudo-member (flags)
"""
if isinstance(value, cls):
return True
try:
return value in cls._value2member_map_
except TypeError:
cls(value)
return True
except ValueError:
return (
value in cls._unhashable_values_ # both structures are lists
or value in cls._hashable_values_
Expand Down
2 changes: 2 additions & 0 deletions Lib/test/test_enum.py
Original file line number Diff line number Diff line change
Expand Up @@ -463,6 +463,7 @@ def test_basics(self):
self.assertEqual(str(TE), "<flag 'MainEnum'>")
self.assertEqual(format(TE), "<flag 'MainEnum'>")
self.assertTrue(TE(5) is self.dupe2)
self.assertTrue(7 in TE)
else:
self.assertEqual(repr(TE), "<enum 'MainEnum'>")
self.assertEqual(str(TE), "<enum 'MainEnum'>")
Expand Down Expand Up @@ -4968,6 +4969,7 @@ class Color(enum.Enum)
| `value` is in `cls` if:
| 1) `value` is a member of `cls`, or
| 2) `value` is the value of one of the `cls`'s members.
| 3) `value` is a pseudo-member (flags)
|
| __getitem__(name)
| Return the member matching `name`.
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fix issue with ``__contains__``, values, and pseudo-members for :class:`enum.Flag`.