Я хочу иметь возможность динамически создавать сервер 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' является недопустимым аргументом ключевого слова для пользователя