🍬update装饰器用法
一般情况下,当执行增、删、改类的接口,会改变查询接口的响应结果。
假设场景调用顺序是:查询–新增–修改,
新增和修改接口都@dependence
查询接口,当执行到修改时,会检测到查询接口已经调用过,就不会再调了(cache表同名字段不会自动覆盖写),那会直接从cache里取这个查询结果,然而取的结果一定是执行新增之前的查询结果,即不是最新的查询结果,可能就会有问题。
@update
的作用,就是当在编写增、删、改类的接口时,可以加上这个装饰器,表示这个接口的调用,会改变查询结果,需要刷新查询接口结果,那么如果cache里已经存在过查询结果,走到这个装饰器,它就重新调一次查询接口,更新cache里的值。
那么当后面再有需要调查询的接口时,就一定取的是最新的查询结果。
使用示例:
from aomaker.aomaker import update
# 参数"cluster_nodes"表示cache表中的变量名
@update("cluster_nodes")
@async_api(wait_asyn_task, "job_id")
@dependence("cluster.get_cluster_list", "cluster_id", imp_module="apis.hpc.cluster")
def add_cluster_nodes(self, test_data: dict = None):
"""添加集群节点"""
cluster_id = self.cache.get_by_jsonpath("cluster_id", "$..cluster_id")
http_data = self._add_nodes(cluster_id=cluster_id, test_data=test_data)
resp = self.send_http(http_data)
return resp
当这个方法被打上@update
后,会在接口执行完成后,去自动检测cache表中是否有“cluster_nodes”这个变量,如果有,则自动重新调一次该生成该变量的接口,没有则忽略。
此外,该装饰器可以以关键字参数接收生成变量接口的入参。
注意:该装饰器是后置装饰器,即在被装饰函数执行后才会执行,如果和@async_api一起用,一定要注意执行顺序!后置装饰器的执行顺序是,离方法名越近的先执行,如示例中的后置装饰器执行顺序为:
1.async_api
2.update