Python 前夕 patch_internal 设置 etag
Python Eve patch_internal set etag
我正在尝试为模式 A 中的文档创建一个 on_insert
事件挂钩,将 eve 的 patch_internal
调用到模式 B 中的文档。
由于触发事件挂钩的请求是A的POST
,所以在flask请求中没有If-Match
header和必要的B etag
。
我尝试在 patch_internal
之前用 flask.request.if_match
设置烧瓶请求的值,但似乎不可能,因为它是一个 frozenset。
如何为 patch_internal
调用设置 etag
?
总而言之,文档的创建会更新具有不同架构的其他文档。我可以这样做吗?
谢谢。
不能说这是最好的方法,但确实有效。
创建一个新的请求上下文来调用 patch_internal
,并在用于创建它的 environ
上设置 etag
,有效。下面是一个例子:
from flask import request, current_app
from eve.methods.patch import patch_internal
...
new_environ = request.environ
new_env['HTTP_IF_MATCH'] = patched_document['_etag']
with current_app.request_context(new_env):
result = patch_internal('my_document_b', {'updated_key': value}, {'_id': my_document_b['_id']})
...
您可以在调用 patch_internal
时设置 concurrency_check=False
from eve.methods.patch import patch_internal
with app.request_context():
payload = {"value_key": "new value"}
lookup = {"_id": "12ababa12..."}
patch_internal("res_name", payload, **lookup, concurrency_check=False)
我正在尝试为模式 A 中的文档创建一个 on_insert
事件挂钩,将 eve 的 patch_internal
调用到模式 B 中的文档。
由于触发事件挂钩的请求是A的POST
,所以在flask请求中没有If-Match
header和必要的B etag
。
我尝试在 patch_internal
之前用 flask.request.if_match
设置烧瓶请求的值,但似乎不可能,因为它是一个 frozenset。
如何为 patch_internal
调用设置 etag
?
总而言之,文档的创建会更新具有不同架构的其他文档。我可以这样做吗?
谢谢。
不能说这是最好的方法,但确实有效。
创建一个新的请求上下文来调用 patch_internal
,并在用于创建它的 environ
上设置 etag
,有效。下面是一个例子:
from flask import request, current_app
from eve.methods.patch import patch_internal
...
new_environ = request.environ
new_env['HTTP_IF_MATCH'] = patched_document['_etag']
with current_app.request_context(new_env):
result = patch_internal('my_document_b', {'updated_key': value}, {'_id': my_document_b['_id']})
...
您可以在调用 patch_internal
concurrency_check=False
from eve.methods.patch import patch_internal
with app.request_context():
payload = {"value_key": "new value"}
lookup = {"_id": "12ababa12..."}
patch_internal("res_name", payload, **lookup, concurrency_check=False)