python - 如何在 dag 模板中的任务函数上使用装饰器
问题描述
我有将近 20 个函数,我为它们编写了一个装饰器,而不是在每个函数中注入相同的代码。所以我的装饰器应该检查每个函数是否返回 500 响应状态代码然后引发异常。谁能给我更清楚?
这是我写的装饰器
def check_tasks_failed(a_func):
"""
Wrapper function to check whether a task_failed
:param task_id:
:param kwargs:
:param kwargs:
:param a_func:
:return:
"""
def wrapper(**kwargs):
task_id_resp_status_code = a_func(**kwargs).status_code
if task_id_resp_status_code in [500]: # Check here what are the criterion for the task to fail
raise ValueError('invalid return status 500')
return wrapper
这是需要装饰器作为示例的功能。
@check_tasks_failed
def get_naming_(**kwargs) -> requests:
"""Get job from custom_etl."""
try:
naming_res = get_custom_etl_job(VALIDATED_CONTAINER,
VALIDATED_CONTAINER,
VALIDATED_CONTAINER,
**kwargs)
except Exception as e:
return {'success':False , 'reason': f'{e}'}
我的预期结果应该是当 get_naming_ 失败以下异常时引发的异常raise ValueError('invalid return status 500')
解决方案
推荐阅读
- php - 降级 PHP 版本 Laravel 5.8
- python - 如何有效地传输数据框中的值?
- spring - 在 Spring MVC 控制器中触发 Camel 路由
- docker - 卷是否可以从处于退出状态的容器中获得?
- jquery - 为什么引导程序中的图标在崩溃时只更改一次?为什么 jquery 代码只运行一次?
- networking - 什么是网络中的抖动变化?
- android-fragments - Room Database 提供的“刷新”LiveData 的最佳方式
- flutter - 如何在 Flutter 中禁用 Web 支持?
- ruby-on-rails - Rails:如何检索数据库凭据以安装 ForestAdmin
- node.js - Node App 仅使用 nodemon 在服务器上运行