Enum equality comparison is inconsistent
cc-jj opened this issue · 0 comments
cc-jj commented
What is the expected behavior?
I expect the following code to always succeed.
It succeeds in simple scripts. But in a larger code base it fails:
class Kind(graphene.Enum):
INTERMEDIATE_FAVORABLE = "intermediate_favorable"
assert Kind.INTERMEDIATE_FAVORABLE == "intermediate_favorable"
Version
- Version: graphene-3.3
- Platform: cpython 3.11.4, macos ventura 13.5.1 (M1)
Other information
The cause of the bug is here:
https://github.com/graphql-python/graphene/blob/master/graphene/types/enum.py#L12
Equivalent strings are not guaranteed to have the same id.
def eq_enum(self, other):
if isinstance(other, self.__class__):
return self is other
return self.value is other
There's a one-line bug fix:
def eq_enum(self, other):
if isinstance(other, self.__class__):
return self is other
return self.value == other
And I suppose maybe an optimization:
def eq_enum(self, other):
if isinstance(other, self.__class__):
return self is other
return self.value is other or self.value == other