графен: методы resol_ не вызываются для вложенных объектов в подписке - PullRequest
0 голосов
/ 13 апреля 2020

Я играю с подписками на графен gql и заметил, что resolve_... методы для вложенных объектов не вызываются рекурсивно для получения значений полей в подписках.

У меня есть следующая схема:

class RandomInt(graphene.ObjectType):
    random_int = graphene.NonNull(graphene.Int)
    const = graphene.NonNull(graphene.Int)

    @staticmethod
    async def resolve_random_int(_, info):
        while True:
            yield random.randint(1, 1000)
            await asyncio.sleep(1)


class Subscriptions(graphene.ObjectType):
    test = graphene.Field(graphene.NonNull(RandomInt))

    @staticmethod
    async def resolve_test(_, info):
        while True:
            yield {"const": 3}
            await asyncio.sleep(1)

Когда я подписываюсь на

subscription {
  test {
    randomInt
    const
  }
}

, я получаю следующую ошибку:

{
  "id": 26,
  "type": "data",
  "payload": {
    "data": {
      "test": null
    },
  "errors": [
     {
       "message": "int() argument must be a string, a bytes-like object or a number, not 'AnonymousObservable'"
     }
]}}

Я бы хотел, чтобы метод resolve_... из вложенного объекта использовался аналогичным образом, чтобы он работал на запросы и мутации. Я что-то не так делаю, это ошибка или это поведение по замыслу?

...