Перечисления(Enums)¶
ПеречисленияEnum
это специальный типGraphQL
, который представляет набор сивольных имен, связанных с уникальными постоянными значениями.
Определение¶
Вы можете создатьEnum
, используя классы:
import graphene
class Episode(graphene.Enum):
NEWHOPE = 4
EMPIRE = 5
JEDI = 6
Но так же используя сущность Enum
:
Episode = graphene.Enum('Episode', [('NEWHOPE', 4), ('EMPIRE', 5), ('JEDI', 6)])
Описание значений¶
Существует возможность добавить описание к значению Enum
, для этого необходимо определить description
свойство:
class Episode(graphene.Enum):
NEWHOPE = 4
EMPIRE = 5
JEDI = 6
@property
def description(self):
if self == Episode.NEWHOPE:
return 'New Hope Episode'
return 'Other episode'
Использование с Python Enums¶
В ситуации, когда Enums
уже определны возможно повторное их использование с помощью функции Enum.from_enum
.
graphene.Enum.from_enum(AlreadyExistingPyEnum)
Enum.from_enum
поддерживает description
и deprecation_reason
лямбда-функции, так что вы можете добавлять описания к Вашему Enum
без изменений оригинала:
graphene.Enum.from_enum(AlreadyExistingPyEnum, description=lambda value: return 'foo' if value == AlreadyExistingPyEnum.Foo else 'bar')
Примечание¶
graphene.Enum
использует внутри себя enum.Enum
(или его backport, если enum.Enum
не доступен) и может использоваться точно также, за исключением методов getter-ов.
В имплементации Python Enum Вы можете получить доступ к элементу путем инициализации Enum
:
from enum import Enum
class Color(Enum):
RED = 1
GREEN = 2
BLUE = 3
assert Color(1) == Color.RED
Однако, в GrapheneEnum
Вам необходимо вызвать get метод для этого:
from graphene import Enum
class Color(Enum):
RED = 1
GREEN = 2
BLUE = 3
assert Color.get(1) == Color.RED