Как мне динамически создать объект графена?Например, я хочу во время выполнения добавить поля и преобразователи на основе файла конфигурации - PullRequest
0 голосов
/ 20 мая 2019

Я хочу иметь возможность динамически создавать сервер GraphQL из заданного файла конфигурации. Так, например, мой файл конфигурации будет включать в себя то, какие поля должны существовать, а некоторые из полей будут иметь флаг, указывающий их как первичный ключ или вторичный ключ, который будет отображаться на них для получения распознавателя. Как бы я достиг динамического создания типа объекта графена?

Я попытался взять пример кода графена и добавить к нему поля. Но он не примет их. Я попытался погрузиться в метаданные и обновить некоторые параметры, но это тоже не сработало.

class User(graphene.ObjectType):
    id = graphene.ID()
    name = graphene.String()


class Query(graphene.ObjectType):
    me = graphene.Field(User)

    def resolve_me(self, info):
        return info.context["user"]

schema = graphene.Schema(query=Query)
query = """
    query something{
      me {
        name
        temp
      }
    }
"""

if __name__ == "__main__":
    userobj = User
    print(dir(userobj._meta.fields))
    setattr(userobj,"temp", graphene.String())
    print((userobj._meta.fields))

    userobj._meta.fields.update({"temp": graphene.String()})
    print(userobj._meta.fields)

    print((userobj._meta.fields))
    result = schema.execute(query, context={"user": userobj(id="X", name="Console", temp="hey")})
    print(result.data)
    print(result.data["me"])

В настоящее время я получаю None с этой попыткой. Извлекая часть, где я обновляю _meta.fields, я получаю 'temp not valid аргумент' для создания userobj. 'temp' является недопустимым аргументом ключевого слова для пользователя

...