Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enum equality comparison is inconsistent #1524

Open
cc-jj opened this issue Sep 1, 2023 · 0 comments
Open

Enum equality comparison is inconsistent #1524

cc-jj opened this issue Sep 1, 2023 · 0 comments
Labels

Comments

@cc-jj
Copy link

cc-jj commented Sep 1, 2023

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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant