Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 在Apache中管理分支和合并的最佳方法_Python 3.x_Airflow_Airflow Operator - Fatal编程技术网

Python 3.x 在Apache中管理分支和合并的最佳方法

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

我有一个问题要解决:

每当有人注册时,web应用程序都会在数据库中记录身份验证代码的电子邮件请求,并重定向到下一个屏幕,用户必须在该屏幕中输入发送到其电子邮件的六位数代码

这就是我设想的DAG:

我的DAG代码:

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,我得到这些值。