微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在请求级别使用 Dataloader (graphene + tornado-graphql)

如何解决在请求级别使用 Dataloader (graphene + tornado-graphql)

我正在尝试将 GraphQL 集成到我用 Tornado (python) 编写的 Web 服务中。通过使用数据加载器,我可以加快我的请求并避免向我的数据库发送多个查询。但问题是我找不到任何示例或定义等于请求级别的“上下文”变量来存储 GraphQLView。我找到了一个用 sanic refer to this link 编写的示例。 “龙卷风”中是否有任何定义等于sanic中的“上下文”(get_context)???或任何解决此类属性的示例:

class Bandwidth(ObjectType):
    class Meta:
        interfaces = (Service,)
    min_inbits_value = Field(Point)
    max_inbits_value = Field(Point)
    def resolve_min_inbits_value(context,resolve_info,arg1,arg2):

解决方法

最后,我可以在请求级别访问和修改上下文,我想分享我是如何做到的。我可以在 TornadoGraphQLHandler 中包装上下文属性,但我需要解析原始查询:

from graphene_tornado import tornado_graphql_handler
from graphql import parse
class TornadoGraphQLHandler(tornado_graphql_handler.TornadoGraphQLHandler):
    @property
    def context(self):
        data = self.parse_body()
        query,variables,operation_name,id = self.get_graphql_params(self.request,data)
        try:
            document = parse(query)
            args = dict()
            for member in document.definitions[0].selection_set.selections[0].arguments:
                args[member.name.value] = member.value.value
            return <dataloaders with the arguments in request here>
        except:
            return self.request

通过这种方式,我可以通过下一层石墨烯中的“info.context”访问dataloader。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。