Как я могу отфильтровать / постобработать результат Python-Graphene - PullRequest
0 голосов
/ 10 мая 2019

В настоящее время я пишу 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()))
...