You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by jm...@apache.org on 2021/02/01 04:04:50 UTC

[airflow] branch master updated: Add aws ses email backend for use with EmailOperator. (#13986)

This is an automated email from the ASF dual-hosted git repository.

jmcarp pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/airflow.git


The following commit(s) were added to refs/heads/master by this push:
     new 01049dd  Add aws ses email backend for use with EmailOperator. (#13986)
01049dd is described below

commit 01049ddce210f475d6eae9b1cb306f750a1d6dd8
Author: Joshua Carp <jm...@gmail.com>
AuthorDate: Sun Jan 31 23:04:30 2021 -0500

    Add aws ses email backend for use with EmailOperator. (#13986)
---
 airflow/providers/amazon/aws/utils/__init__.py   | 16 ++++++++
 airflow/providers/amazon/aws/utils/emailer.py    | 49 ++++++++++++++++++++++++
 tests/providers/amazon/aws/utils/__init__.py     | 16 ++++++++
 tests/providers/amazon/aws/utils/test_emailer.py | 42 ++++++++++++++++++++
 4 files changed, 123 insertions(+)

diff --git a/airflow/providers/amazon/aws/utils/__init__.py b/airflow/providers/amazon/aws/utils/__init__.py
new file mode 100644
index 0000000..13a8339
--- /dev/null
+++ b/airflow/providers/amazon/aws/utils/__init__.py
@@ -0,0 +1,16 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
diff --git a/airflow/providers/amazon/aws/utils/emailer.py b/airflow/providers/amazon/aws/utils/emailer.py
new file mode 100644
index 0000000..fc28593
--- /dev/null
+++ b/airflow/providers/amazon/aws/utils/emailer.py
@@ -0,0 +1,49 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+"""Airflow module for email backend using AWS SES"""
+
+from typing import List, Optional, Union
+
+from airflow.providers.amazon.aws.hooks.ses import SESHook
+
+
+def send_email(
+    to: Union[List[str], str],
+    subject: str,
+    html_content: str,
+    files: Optional[List] = None,
+    cc: Optional[Union[List[str], str]] = None,
+    bcc: Optional[Union[List[str], str]] = None,
+    mime_subtype: str = 'mixed',
+    mime_charset: str = 'utf-8',
+    conn_id: Optional[str] = None,
+    **kwargs,
+) -> None:
+    """Email backend for SES."""
+    hook = SESHook(aws_conn_id=conn_id)
+    hook.send_email(
+        mail_from=None,
+        to=to,
+        subject=subject,
+        html_content=html_content,
+        files=files,
+        cc=cc,
+        bcc=bcc,
+        mime_subtype=mime_subtype,
+        mime_charset=mime_charset,
+    )
diff --git a/tests/providers/amazon/aws/utils/__init__.py b/tests/providers/amazon/aws/utils/__init__.py
new file mode 100644
index 0000000..13a8339
--- /dev/null
+++ b/tests/providers/amazon/aws/utils/__init__.py
@@ -0,0 +1,16 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
diff --git a/tests/providers/amazon/aws/utils/test_emailer.py b/tests/providers/amazon/aws/utils/test_emailer.py
new file mode 100644
index 0000000..3d99573
--- /dev/null
+++ b/tests/providers/amazon/aws/utils/test_emailer.py
@@ -0,0 +1,42 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+from unittest import mock
+
+from airflow.providers.amazon.aws.utils.emailer import send_email
+
+
+@mock.patch("airflow.providers.amazon.aws.utils.emailer.SESHook")
+def test_send_email(mock_hook):
+    send_email(
+        to="to@test.com",
+        subject="subject",
+        html_content="content",
+    )
+    mock_hook.return_value.send_email.assert_called_once_with(
+        mail_from=None,
+        to="to@test.com",
+        subject="subject",
+        html_content="content",
+        bcc=None,
+        cc=None,
+        files=None,
+        mime_charset="utf-8",
+        mime_subtype="mixed",
+    )