我有一个复杂的服务,它以异步方式运行flask查询。因此,烧瓶应用程序接受请求并将它们提交到队列并返回调用者的句柄。然后,异步服务获取这些请求并运行它们,然后将响应提交给数据存储。呼叫者将连续轮询烧瓶终点以检查数据是否可用。目前,此异步功能仅适用于单个烧瓶端点。但我想将其扩展到多个烧瓶终点。因此,我将代码提交给python装饰器中的队列。因此,这个装饰器可以应用于任何烧瓶端点,然后它将支持这个异步功能。
但为了无缝地实现这一点,我需要为烧瓶设置自定义请求上下文。这是因为烧瓶端点使用来自烧瓶的request.args,request.json,jsonify。而异步服务只调用与烧瓶端点相关的函数。
我尝试使用app.test_request_context(),但这不允许我分配给request.json。
with app.test_request_context() as req:
req.request.json = json.dump(args)
以上不起作用并抛出以下错误
AttributeError: can't set attribute
我怎样才能做到这一点?
答案 0 :(得分:0)
答案是
builder = EnvironBuilder(path='/',
query_string=urllib.urlencode(query_options), method='POST', data=json.dumps(post_payload),
content_type="application/json")
env = builder.get_environ()
with app.request_context(env):
func_to_call(*args, **kwargs)