Python 3.x 在Apache中管理分支和合并的最佳方法
我有一个问题要解决: 每当有人注册时,web应用程序都会在数据库中记录身份验证代码的电子邮件请求,并重定向到下一个屏幕,用户必须在该屏幕中输入发送到其电子邮件的六位数代码 这就是我设想的DAG: 我的DAG代码:Python 3.x 在Apache中管理分支和合并的最佳方法,python-3.x,airflow,airflow-operator,Python 3.x,Airflow,Airflow Operator,我有一个问题要解决: 每当有人注册时,web应用程序都会在数据库中记录身份验证代码的电子邮件请求,并重定向到下一个屏幕,用户必须在该屏幕中输入发送到其电子邮件的六位数代码 这就是我设想的DAG: 我的DAG代码: default_args = { "owner":"airflow", "start_date": datetime(2021,4,2), "depends_on_past": F
default_args = {
"owner":"airflow",
"start_date": datetime(2021,4,2),
"depends_on_past": False,
"email_on_failure": False,
"email_on_retry": False,
"email":"rhonaldmoses@gmail.com",
"retries":1,
"retries_delay":timedelta(minutes=5)
}
def email_request_exists(response):
json_response_text = json.loads(response.text)
#by default, email requests do not exists
requests_exists = False
if json_response_text['status']==200:
if json_response_text['requests_exists'] > 0:
requests_exists = True
email_request_status = Variable.set('request_exists',requests_exists)
return email_request_status
def get_request_processor():
switch = Variable.get('request_exists')
if switch:
return 'anp_process_email_requests'
else:
return 'anp_no_email_to_process'
def check_is_request_processed(response):
print(response.text)
json_response_text = json.loads(response.text)
print(json_response_text)
if json_response_text['status']==200:
if json_response_text['request_processed'] > 0:
return 'anp_check_orphan_emails'
return 'anp_email_request_done'
with DAG(dag_id="artnpics_auth_email_manager", schedule_interval="* * * * *",
default_args=default_args,
catchup=False) as dag:
anp_is_email_request_available = HttpSensor(
task_id="anp_is_email_request_available",
method='GET',
http_conn_id='artnpics_api_calls',
endpoint='commsemail/api-email-request-processor/',
response_check=lambda response: True if email_request_exists(response) is True else False,
poke_interval=5,
timeout=20
)
anp_has_emails_to_process = BranchPythonOperator(
task_id='anp_has_emails_to_process',
python_callable=get_request_processor,
trigger_rule="one_success"
#trigger_rule="all_success"
)
#execute this when the email request queue check returned success
anp_process_email_requests = HttpSensor(
task_id="anp_process_email_requests",
method='GET',
http_conn_id='artnpics_api_calls',
endpoint='commsemail/api-email-process-requests/',
response_check=lambda response: True if check_is_request_processed(response) is True else False,
poke_interval=5,
timeout=20
)
#execute this when the email request queue check returned failure
anp_no_email_to_process = DummyOperator(
task_id='anp_no_email_to_process',
#trigger_rule="all_success"
)
#check records that are ommitted for a very long time and reprioritize them
anp_check_orphan_emails = DummyOperator(
task_id='anp_check_orphan_emails',
trigger_rule="one_success"
)
anp_email_request_done = DummyOperator(
task_id='anp_email_request_done',
trigger_rule="one_success"
)
anp_is_email_request_available >> anp_has_emails_to_process >> anp_no_email_to_process >> anp_email_request_done
anp_is_email_request_available >> anp_has_emails_to_process >> anp_process_email_requests >> anp_email_request_done
当我运行时,anp_is_email_request_available任务被执行,然后停止。但是,它不会转到下一个(分支运算符)
基本上,这就是我想要实现的目标:
如果电子邮件请求可用,则执行anp,并查看API是否返回真/假(如果存在状态为1的电子邮件请求,则返回真或假)
如果anp_中的返回值为_email_request_available为True,则执行anp_process_email_requests。否则,处理anp_电子邮件_请求_完成
如果anp_中的retuend值为(电子邮件)(请求)(可用)为假,则执行anp_电子邮件(请求)(请求)完成
API运行良好(我删除了所有条件分支,并使其具有顺序性,并且工作完美无瑕).请尝试检查
anp\u is\u email\u request\u available
的日志,了解更多详细信息,但我认为您在lambda
中使用的可调用的
函数可能有问题,用于响应检查
response\u check=lambda response:True如果存在电子邮件请求(response),则为True,否则为False,
email\u request\u exists
正在返回None
而不是True
使响应检查失败。稍后对于检查请求是否已处理,也会发生同样的情况。您可以更改这些函数的返回值或更改三元运算符以计算该值的值
response\u check=lambda response:True如果存在电子邮件请求(response)否则False,
您可以在此找到一个可调用的示例。希望这对你有用 不幸的是,这不起作用。电子邮件请求返回True/False,我得到这些值。