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",
+ )