web-dev-qa-db-fra.com

Comment passer un paramètre à PythonOperator dans Airflow

Je viens de commencer à utiliser Airflow, quelqu'un peut-il m'éclairer sur la façon de passer un paramètre dans PythonOperator comme ci-dessous:

t5_send_notification = PythonOperator(
    task_id='t5_send_notification',
    provide_context=True,
    python_callable=SendEmail,
    op_kwargs=None,
    #op_kwargs=(key1='value1', key2='value2'),
    dag=dag,
)

def SendEmail(**kwargs):
    msg = MIMEText("The pipeline for client1 is completed, please check.")
    msg['Subject'] = "xxxx"
    msg['From'] = "xxxx"
    ......
    s = smtplib.SMTP('localhost')
    s.send_message(msg)
    s.quit()

Je voudrais pouvoir passer quelques paramètres dans le t5_send_notification's callable qui est SendEmail, idéalement je veux joindre le journal complet et/ou une partie du journal (qui provient essentiellement des kwargs) à l'e-mail à envoyer, en devinant le t5_send_notification est l'endroit idéal pour recueillir ces informations.

Merci beaucoup.

8
mdivk
  1. Passez un objet dict à op_kwargs
  2. Utilisez les touches pour accéder à leur valeur à partir de kwargs dict dans votre python appelable

    def SendEmail(**kwargs):
        print(kwargs['key1'])
        print(kwargs['key2'])
        msg = MIMEText("The pipeline for client1 is completed, please check.")
        msg['Subject'] = "xxxx"
        msg['From'] = "xxxx"
        ......
        s = smtplib.SMTP('localhost')
        s.send_message(msg)
        s.quit()
    
    
    t5_send_notification = PythonOperator(
        task_id='t5_send_notification',
        provide_context=True,
        python_callable=SendEmail,
        op_kwargs={'key1': 'value1', 'key2': 'value2'},
        dag=dag,
    )
    
17
Ryan Yuan

Cela devrait fonctionner:

t5_send_notification = PythonOperator(
    task_id='t5_send_notification',
    provide_context=True,
    python_callable=SendEmail,
    op_kwargs={my_param='value1'},
    dag=dag,
)

def SendEmail(my_param,**kwargs):
    print(my_param) #'value_1'
    msg = MIMEText("The pipeline for client1 is completed, please check.")
    msg['Subject'] = "xxxx"
    msg['From'] = "xxxx"
    ......
    s = smtplib.SMTP('localhost')
    s.send_me
2
ethanenglish