我正在用Http Sensor写一个气流dag,它检查http响应中是否包含执行日期的字符串。如何在response_check函数中正确访问执行日期?
我尝试过
s = HttpSensor(
task_id=some_task_id,
http_conn_id=some_http_conn_id,
endpoint=some_endpoint,
method='POST',
request_params=some_params_json_str,
headers={'Content-Type': 'application/json'},
response_check=lambda response: True if 'dt={{ ds }}' in json.loads(response.text)['list_of_dates'] else False,
poke_interval=30,
dag=dag,
)
测试任务时,尽管应该在第一次戳中满足标准,但它会不断戳戳。为了进行比较,我通过执行日期的显式日期字符串对response_check进行了硬编码,如下所示:
response_check=lambda response: True if 'dt=2019-05-08' in json.loads(response.text)['list_of_dates'] else False,
任务按预期执行,并在第一次戳后完成。
response_check函数中是否允许直接使用“ {{ds}}”模板?如果没有,正确的方法是什么?
我尝试过的其他事情:
response_check=lambda response, ds: True if 'dt='+ds in json.loads(response.text)['list_of_dates'] else False,
会给我
TypeError: <lambda>() missing 1 required positional argument: 'ds'
也尝试过:
response_check=lambda response, **kwargs: True if 'dt='+kwargs['execution_date'] in json.loads(response.text)['result']['partitions'] else False,
会给我
KeyError: 'execution_date'