【问题标题】:Graphene resolver return function石墨烯解析器返回函数
【发布时间】:2021-03-14 09:30:29
【问题描述】:

我使用 Python Graphene 创建了一个 ObjectType,但是在返回数据的查询对象中,我不知道解析器应该返回什么。

我的代码如下:

class RunLog(ObjectType):
    status = String()
    result = String()
    log = List(String)

    def resolve_status(self, resolve, run_id):
        return r.hget("run:%i" % run_id, "status").decode('utf-8')

    def resolve_result(self, resolve, run_id):
        return r.hget("run:%i" % run_id, "result").decode('utf-8')

    def resolve_log(self, resolve, run_id):
        log_data = r.lrange("run:%i:log" % run_id, 0, -1)
        log_data = [entry.decode('utf-8') for entry in log_data]

        return log_data


class Query(ObjectType):
    log_by_run_id = Field(RunLog, run_id=Int(required=True))

    def resolve_log_by_run_id(root, info, run_id):
        return ???

RunLog 对象应该从 redis 数据库中读取并返回相关 run_id 处的数据。

我希望能够执行以下查询以获取与该运行相关的数据:

{
  logByRunId(runId: 1) {
    status
    result
    log
  }
}

'resolve_log_by_run_id' 应该返回什么? Graphene 文档没有帮助。

【问题讨论】:

    标签: python graphql graphene-python


    【解决方案1】:

    尝试返回一个RunLog 对象,即

    def resolve_log_by_run_id(root, info, run_id):
        # fetch values from Redis here using run_id (status, result, log)
        run_log = RunLog(status=status, result=result, log=log)
        return run_log
    

    此外,由于传递给您的方法的参数已命名,您应该考虑将您的方法重命名为限制较少的名称,例如 resolve_log 或 resolve_run_log。如果您需要向解析器添加另一个过滤器,则无需添加其他方法。

    【讨论】:

      猜你喜欢
      • 2019-01-19
      • 2022-10-25
      • 2020-08-25
      • 2020-06-24
      • 2017-11-02
      • 1970-01-01
      • 2020-06-29
      • 2017-05-11
      • 2022-01-24
      相关资源
      最近更新 更多