Рассмотрим следующий перечислимый класс:
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