graphql-python / graphql-python/graphene

Enum equality comparison is inconsistent

Offen
#1,524 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
🐛 bug
Vorherrschende Sprache
Python
Sterne
8.2k
Forks
818
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

## 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:
```python
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.

```python
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:
```python
def eq_enum(self, other):
if isinstance(other, self.__class__):
return self is other
return self.value == other
```

And I suppose maybe an optimization:
```python
def eq_enum(self, other):
if isinstance(other, self.__class__):
return self is other
return self.value is other or self.value == other
```

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Rechercherichtung

Beginnen Sie in graphene/types/enum.py bei der im issue identifizierten Implementierung von eq_enum und vergleichen Sie deren Identitätsprüfungen mit der gemeldeten assertion. Überprüfen Sie, dass äquivalente Enum-Werte konsistent mit dem entsprechenden String verglichen werden, und bestätigen Sie anschließend, dass die bereitgestellte Reproduktion unter den angegebenen Python- und Graphene-Versionen erfolgreich ist.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
api, backend
Issue-Typ
Bug
Schwierigkeit
1/5
Geschätzter Aufwand
Unter einer Stunde
Aktivitätsstatus
Veraltet
Klarheit
Klar beschrieben
Anfängerfreundlichkeit
52/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.