问题描述
这是使用Python和Graphene库的。
我想通过GraphQL向我的前端提供一个常量列表。我走了使用检查的路线,但是它只会输出枚举的键。不是值。我了解到石墨烯枚举仅包含名称/描述。
{
__type(name: "FruitEnum") {
enumValues {
name
description
}
}
}
这将返回
{
"data": {
"__type": {
"enumValues": [
{
"name": "APPLE","description": null
},{
"name": "BANANA",{
"name": "ORANGE","description": null
}
]
}
},"errors": null
}
这是实际枚举的样子
class FruitEnum(Enum):
APPLE = "Apple -- but Could also be other information for the front end"
BANANA = "Banana"
ORANGE = "Orange"
是否有通过GraphQL公开这样的常量列表的首选方法?可以使用解析器修改自省以读取值吗?我正在使用常规的Python枚举,并使用Enum.from_enum函数将其注册到Graphene。
解决方法
我认为您不是从 enumValues
中添加或删除字段的人,因为这是标准操作。
但是,您可以通过在枚举类中指定 description
property
来添加描述。
import graphene
from enum import Enum as PyEnum
class FruitEnum(PyEnum):
APPLE = "Apple"
BANANA = "Banana"
ORANGE = "Orange"
def get_field_description(self):
mapper = {
"default": "default description","APPLE": "Apple description"
}
return mapper.get(self.name,mapper['default'])
@property
def description(self):
return self.get_field_description()
class FruitType(graphene.ObjectType):
foo = graphene.Enum.from_enum(FruitEnum)()
因此,您将得到一个响应,
{
"data": {
"__type": {
"name": "FruitEnum","enumValues": [
{
"name": "APPLE","description": "Apple description"
},{
"name": "BANANA","description": "default description"
},{
"name": "ORANGE","description": "default description"
}
]
}
}
}