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)