如何在Airflow HttpSensor response_check函数中访问上下文,例如execute_date

时间:2019-05-09 19:07:24

标签: airflow

我正在用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'

0 个答案:

没有答案