Python Eve patch_internal set etag

时间:2016-08-25 19:14:55

标签: python flask eve

我正在尝试为架构A中的文档创建 $(document).ready(function(){ var total = 0; var quantity = parseInt($('.quantity').val()); var unitprice = parseFloat($('.unitprice').val()); var vat_percentage = parseFloat($('.vat_percentage').val()); total = (quantity * unitprice) * vat_percentage; $('.total').closest('.total').text(total); }); 事件挂钩,将前夕的on_insert调用到架构B中的文档。

由于触发事件挂钩的请求对于A是patch_internal,因此在烧瓶请求中没有POST标头和必要的B If-Match

我试图在etag patch_internal之前设置烧瓶请求的值,但似乎不可能,因为它是冻结的。

如何为flask.request.if_match电话设置etag

总之,文档的创建会更新具有不同模式的其他文档。我可以这样做吗?

感谢。

2 个答案:

答案 0 :(得分:2)

您可以在致电concurrency_check=False

时设置patch_internal
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)

答案 1 :(得分:0)

不能说这是最好的方式,但它确实有效。

创建新的请求上下文以调用patch_internal,并在用于创建它的etag上设置environ。下面是一个例子:

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']})
...