Поля `sqlalchemy.types.Enum` в Graphene-SQLAlchemy сопоставлены со строками в схеме GraphQL - PullRequest
0 голосов
/ 25 мая 2018

Рассмотрим следующий перечислимый класс:

import enum
class CoverTitleColor(enum.Enum):
    YELLOW = "yellow"
    RED = "red"
    BLUE = "blue"
    ORANGE = "orange"
    WHITE = "white"
    PURPLE = "purple"

, заданный в качестве поля ORM SQLAlchemy следующим образом:

class Book(Base, OrmBaseMixin):
    __tablename__ = "books"

    book_id = sqlalchemy.Column(
        sqlalchemy.types.Integer(),
        primary_key=True,
    )
    ...
    cover_title_color = sqlalchemy.Column(
        sqlalchemy.types.Enum(CoverTitleColor),
        nullable=False
    )

и доступ к графену через:

class TypeBook(SQLAlchemyObjectType):
    class Meta:
        model = Book

Однако при интроспекции TypeBook через GraphQL через следующий запрос:

{
  __type(name: "TypeBook") {
    name
    fields {
      name
      type {
        name
        kind
        ofType {
          name
          kind
        }
      }
    }
  }
}

поле coverTitleColor интерпретируется как строка:

{
  "name": "coverTitleColor",
  "type": {
    "name": null,
    "kind": "NON_NULL",
    "ofType": {
      "name": "String",
      "kind": "SCALAR"
    }
  }
},

при запросе этого поля,например, через:

query {
  books(year: 1990) {
    coverTitleColor
  } 
}

результатом действительно является строка, подобная этой:

{
  "data": {
    "books": [
      {
        "coverTitleColor": "CoverTitleColor.YELLOW"
      },
      {
        "coverTitleColor": "CoverTitleColor.RED"
      }
    ]
  }
}

Я что-то упустил?Это ожидаемое поведение?

Полный рабочий код можно найти в https://github.com/somada141/demo-graphql-sqlalchemy-falcon/tree/issue-graphene-sqlalchemy-135

Этот вопрос также был опубликован как выпуск GH под https://github.com/graphql-python/graphene-sqlalchemy/issues/135

...