Я играю с подписками на графен 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_...
из вложенного объекта использовался аналогичным образом, чтобы он работал на запросы и мутации. Я что-то не так делаю, это ошибка или это поведение по замыслу?