Python 使用Graphene返回具有字符串值的枚举列表

Python 使用Graphene返回具有字符串值的枚举列表,python,enums,graphql,graphene-python,Python,Enums,Graphql,Graphene Python,这是使用Python和Graphene库 我想通过GraphQL向前端提供一个常量列表。我使用了inspection,但它只输出枚举的键。不是价值观。我了解到石墨烯枚举只包含名称/描述 { __type(name: "FruitEnum") { enumValues { name description } } } 这是回报 { "data"

这是使用Python和Graphene库

我想通过GraphQL向前端提供一个常量列表。我使用了inspection,但它只输出枚举的键。不是价值观。我了解到石墨烯枚举只包含名称/描述

    {
      __type(name: "FruitEnum") {
        enumValues {
          name
          description
        }
      }
    }
这是回报

{
  "data": {
    "__type": {
      "enumValues": [
        {
          "name": "APPLE",
          "description": null
        },
        {
          "name": "BANANA",
          "description": null
        },
        {
          "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公开这样的常量列表?可以用解析器修改内省以读取值吗?我正在使用enum.from_enum函数获取一个常规Python枚举并向Graphene注册它。

我认为您不会从
枚举值中添加或删除字段,因为它是标准的

但是,您可以通过在enum类中指定
说明
属性来添加说明

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"
        }
      ]
    }
  }
}