From c0a27bcfc0bd2a775a375e72e1bfa48de081b1c2 Mon Sep 17 00:00:00 2001 From: Jarek Potiuk Date: Mon, 26 Feb 2024 13:21:11 +0100 Subject: [PATCH] Fix backwards compatibility for SMTP provider (#37701) The #36226 introduced backwards compatibility check for the smtp provider, where it relied pn airflow settings containig new settings. This PR fixes it by falling back to default settings in case the settings cannot be imported. --- airflow/providers/smtp/notifications/smtp.py | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/airflow/providers/smtp/notifications/smtp.py b/airflow/providers/smtp/notifications/smtp.py index ce977152e2aeb..59877ee29ac9e 100644 --- a/airflow/providers/smtp/notifications/smtp.py +++ b/airflow/providers/smtp/notifications/smtp.py @@ -25,6 +25,24 @@ from airflow.notifications.basenotifier import BaseNotifier from airflow.providers.smtp.hooks.smtp import SmtpHook +try: + from airflow.settings import SMTP_DEFAULT_TEMPLATED_HTML_CONTENT_PATH, SMTP_DEFAULT_TEMPLATED_SUBJECT +except ImportError: + # This is a fallback for when the settings are not available - they were only added in 2.8.1, + # so we should be able to remove it when min airflow version for the SMTP provider is 2.9.0 + # we do not raise deprecation warning here, because the user might be using 2.8.0 and the new provider + # deliberately, and we do not want to upgrade to newer version of Airflow so we should not raise the + # deprecation warning here. If the user will modify the settings in local_settings even for earlier + # versions of Airflow, they will be properly used as they will be imported above + SMTP_DEFAULT_TEMPLATED_HTML_CONTENT_PATH = (Path(__file__).parent / "templates" / "email.html").as_posix() + SMTP_DEFAULT_TEMPLATED_SUBJECT = """ +{% if ti is defined %} +DAG {{ ti.dag_id }} - Task {{ ti.task_id }} - Run ID {{ ti.run_id }} in State {{ ti.state }} +{% elif slas is defined %} +SLA Missed for DAG {{ dag.dag_id }} - Task {{ slas[0].task_id }} +{% endif %} +""" + class SmtpNotifier(BaseNotifier): """ @@ -82,8 +100,6 @@ def __init__( *, template: str | None = None, ): - from airflow.settings import SMTP_DEFAULT_TEMPLATED_HTML_CONTENT_PATH, SMTP_DEFAULT_TEMPLATED_SUBJECT - super().__init__() self.smtp_conn_id = smtp_conn_id self.from_email = from_email or conf.get("smtp", "smtp_mail_from")