Skip to content

Commit e42b35c

Browse files
ethanfurmantomasr8
authored andcommitted
pythongh-131045: [Enum] fix flag containment checks when using values (pythonGH-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. (cherry picked from commit 17d06ae) Co-authored-by: Ethan Furman <ethan@stoneleaf.us> Co-authored-by: Tomas R. <tomas.roun8@gmail.com>
1 parent 65b5829 commit e42b35c

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
@@ -746,12 +746,14 @@ def __contains__(cls, value):
746746
`value` is in `cls` if:
747747
1) `value` is a member of `cls`, or
748748
2) `value` is the value of one of the `cls`'s members.
749+
3) `value` is a pseudo-member (flags)
749750
"""
750751
if isinstance(value, cls):
751752
return True
752753
try:
753-
return value in cls._value2member_map_
754-
except TypeError:
754+
cls(value)
755+
return True
756+
except ValueError:
755757
return (
756758
value in cls._unhashable_values_ # both structures are lists
757759
or value in cls._hashable_values_

Lib/test/test_enum.py

+2
Original file line numberDiff line numberDiff line change
@@ -463,6 +463,7 @@ def test_basics(self):
463463
self.assertEqual(str(TE), "<flag 'MainEnum'>")
464464
self.assertEqual(format(TE), "<flag 'MainEnum'>")
465465
self.assertTrue(TE(5) is self.dupe2)
466+
self.assertTrue(7 in TE)
466467
else:
467468
self.assertEqual(repr(TE), "<enum 'MainEnum'>")
468469
self.assertEqual(str(TE), "<enum 'MainEnum'>")
@@ -4968,6 +4969,7 @@ class Color(enum.Enum)
49684969
| `value` is in `cls` if:
49694970
| 1) `value` is a member of `cls`, or
49704971
| 2) `value` is the value of one of the `cls`'s members.
4972+
| 3) `value` is a pseudo-member (flags)
49714973
|
49724974
| __getitem__(name)
49734975
| 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)