diff --git a/graphql/type/definition.py b/graphql/type/definition.py index 2f499aec..52128aea 100644 --- a/graphql/type/definition.py +++ b/graphql/type/definition.py @@ -551,7 +551,10 @@ def parse_literal(self, value_ast): @cached_property def _value_lookup(self): # type: () -> Dict[str, GraphQLEnumValue] - return {value.value: value for value in self.values} + return { + value.value.value if isinstance(value.value, PyEnum) else value.value: value + for value in self.values + } @cached_property def _name_lookup(self): diff --git a/graphql/type/tests/test_serialization.py b/graphql/type/tests/test_serialization.py index d91fd29d..85492b26 100644 --- a/graphql/type/tests/test_serialization.py +++ b/graphql/type/tests/test_serialization.py @@ -81,3 +81,24 @@ class Color(Enum): assert enum_type.serialize(Color.RED.value) == "RED" assert enum_type.serialize(Color.EXTRA) is None assert enum_type.serialize(Color.EXTRA.value) is None + + +def test_serialize_enum_pyenum(): + class Color(Enum): + RED = 1 + GREEN = 2 + BLUE = 3 + EXTRA = 4 + + enum_type = GraphQLEnumType( + "Color", + values={ + "RED": GraphQLEnumValue(Color.RED), + "GREEN": GraphQLEnumValue(Color.GREEN), + "BLUE": GraphQLEnumValue(Color.BLUE), + }, + ) + assert enum_type.serialize(Color.RED) == "RED" + assert enum_type.serialize(Color.RED.value) == "RED" + assert enum_type.serialize(Color.EXTRA) is None + assert enum_type.serialize(Color.EXTRA.value) is None