微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用Graphene

如何解决使用Graphene

这是使用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"
        }
      ]
    }
  }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。