В настоящее время я пишу API-интерфейс GraphQL с Python-Graphene.
Один распознаватель предоставляет список записей, и я хотел бы выполнить некоторую постобработку / фильтрацию здесь.Однако свойства дочерних записей не разрешаются в настоящее время, конечно позже.
Что я могу сделать?Экспериментировал с возвратом Обещания и привязкой к его «тогда» методу или написанием промежуточного программного обеспечения.Все это дает «необработанные» дочерние записи, т.е. не с разрешенными данными.Провел некоторые исследования, могу ли я найти данные в какой-то скрытой структуре данных, но pysnooper доказывает, что данные просто не вычисляются в настоящее время.
Обратите внимание: я НЕ использую Django в этом проекте.Это минимальный пример того, что я пытаюсь сделать, обратите внимание на строку TODO .
""" Test some graphene features"""
import graphene
from collections import namedtuple
from datetime import date
from json import dumps
DBUser = namedtuple('DBUser', ('name', 'year_of_birth'))
# Our, ehm, professional database ;-)
DATABASE = [
DBUser('John', 1970),
DBUser('Mary', 1980),
DBUser('Sandra', 1990),
DBUser('Michael', 2000),
]
class User(graphene.ObjectType):
name = graphene.String()
age = graphene.Int()
def resolve_name(self, info):
return self.name
def resolve_age(self, info):
return date.today().year - self.year_of_birth
class Query(graphene.ObjectType):
users = graphene.List(
User,
min_age=graphene.Int())
def resolve_users(self, info, min_age):
for dbuser in DATABASE:
# TODO: Would like to use computed "age" of User here somehow
if dbuser.year_of_birth < 1989:
yield dbuser
schema = graphene.Schema(query=Query)
query = "query { users(minAge: 30) { name age } }"
result = schema.execute(request_string=query)
print(dumps(result.to_dict()))