From b7c3171457b95d79aded4c84b012112312e53910 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Marquis?= Date: Fri, 11 Oct 2019 10:17:43 +0200 Subject: [PATCH] fix: make mailjet_rest package optional --- .../forseti/common/util/email/email_factory.py | 6 +++--- .../common/util/email/mailjet_connector.py | 15 +++++++++++---- .../common/util/email/sendgrid_connector.py | 2 +- setup.py | 4 +++- tests/common/util/mailjet_connector_test.py | 8 ++++++-- tests/common/util/sendgrid_connector_test.py | 4 ++-- tests/notifier/notifiers/email_factory_test.py | 3 ++- 7 files changed, 28 insertions(+), 14 deletions(-) diff --git a/google/cloud/forseti/common/util/email/email_factory.py b/google/cloud/forseti/common/util/email/email_factory.py index 84cc73361d..5b9232a704 100644 --- a/google/cloud/forseti/common/util/email/email_factory.py +++ b/google/cloud/forseti/common/util/email/email_factory.py @@ -16,16 +16,16 @@ from builtins import object from google.cloud.forseti.common.util import logger -from google.cloud.forseti.common.util.email import sendgrid_connector from google.cloud.forseti.common.util.email import mailjet_connector +from google.cloud.forseti.common.util.email import sendgrid_connector from google.cloud.forseti.common.util.errors import InvalidInputError LOGGER = logger.get_logger(__name__) EMAIL_CONNECTOR_FACTORY = { - 'sendgrid': sendgrid_connector.SendgridConnector, - 'mailjet': mailjet_connector.MailjetConnector + 'mailjet': mailjet_connector.MailjetConnector, + 'sendgrid': sendgrid_connector.SendgridConnector } diff --git a/google/cloud/forseti/common/util/email/mailjet_connector.py b/google/cloud/forseti/common/util/email/mailjet_connector.py index ed1f09ed66..6957c8e106 100755 --- a/google/cloud/forseti/common/util/email/mailjet_connector.py +++ b/google/cloud/forseti/common/util/email/mailjet_connector.py @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -"""Email utility module.""" +"""Mailjet email connector module.""" # The pre-commit linter will complain about useless disable of no-member, but # this is needed because quiet the Sendgrid no-member error on Travis. @@ -25,9 +25,6 @@ from future import standard_library from requests import Response from retrying import retry - -from mailjet_rest import Client - from google.cloud.forseti.common.util import errors as util_errors from google.cloud.forseti.common.util import logger from google.cloud.forseti.common.util import retryable_exceptions @@ -37,6 +34,16 @@ LOGGER = logger.get_logger(__name__) +try: + from mailjet_rest import Client + MAILJET_ENABLED = True +except ImportError: + LOGGER.warning('Cannot enable Mailjet connector because the ' + '`mailjet_rest` library was not found. Run ' + '`sudo pip3 install mailjet_rest` to install ' + 'Mailjet.') + MAILJET_ENABLED = False + class Attachment: """Mailjet attachment.""" diff --git a/google/cloud/forseti/common/util/email/sendgrid_connector.py b/google/cloud/forseti/common/util/email/sendgrid_connector.py index 1967e0fb2d..8d6888fbce 100755 --- a/google/cloud/forseti/common/util/email/sendgrid_connector.py +++ b/google/cloud/forseti/common/util/email/sendgrid_connector.py @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -"""Email utility module.""" +"""Sendgrid email connector module.""" # The pre-commit linter will complain about useless disable of no-member, but # this is needed because quiet the Sendgrid no-member error on Travis. diff --git a/setup.py b/setup.py index 0194220490..0a53641493 100755 --- a/setup.py +++ b/setup.py @@ -40,7 +40,6 @@ 'google-auth-httplib2==0.0.3', 'Jinja2==2.10.1', 'jmespath==0.9.3', - 'mailjet-rest==1.3.3', 'netaddr==0.7.19', 'pyyaml==4.2b4', 'python-graph-core==1.8.2', @@ -68,6 +67,9 @@ OPTIONAL_PACKAGES = { 'profiler': [ 'google-cloud-profiler==1.0.8' + ], + 'mailjet': [ + 'mailjet-rest==1.3.3' ] } diff --git a/tests/common/util/mailjet_connector_test.py b/tests/common/util/mailjet_connector_test.py index 62bde2e4ec..93670d400b 100644 --- a/tests/common/util/mailjet_connector_test.py +++ b/tests/common/util/mailjet_connector_test.py @@ -12,22 +12,26 @@ # See the License for the specific language governing permissions and # limitations under the License. -"""Tests for the Email utility.""" +"""Tests for the Mailjet email connector module.""" import tempfile import unittest from base64 import b64decode from unittest.mock import patch, call from urllib.error import HTTPError +from google.cloud.forseti.common.util.email import mailjet_connector from google.cloud.forseti.common.util.email.mailjet_connector import MailjetConnector, Attachment from google.cloud.forseti.common.util.errors import EmailSendError from tests.unittest_utils import ForsetiTestCase class MailjetConnectorTest(ForsetiTestCase): - """Tests for the Email utility.""" + """Tests for the Mailjet email connector module.""" def setUp(self): + if not mailjet_connector.MAILJET_ENABLED: + self.skipTest('Package `mailjet` not installed.') + self.connector = MailjetConnector( sender="this field is useless", recipient="this field is also useless", diff --git a/tests/common/util/sendgrid_connector_test.py b/tests/common/util/sendgrid_connector_test.py index bff93e98f4..fe9d85c8fe 100644 --- a/tests/common/util/sendgrid_connector_test.py +++ b/tests/common/util/sendgrid_connector_test.py @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -"""Tests for the Email utility.""" +"""Tests for the Sendgrid email connector module.""" import unittest.mock as mock import unittest @@ -25,7 +25,7 @@ class SendgridConnectorTest(ForsetiTestCase): - """Tests for the Email utility.""" + """Tests for the Sendgrid email connector module.""" def test_can_send_email_to_single_recipient(self): """Test can send email to single recipient.""" diff --git a/tests/notifier/notifiers/email_factory_test.py b/tests/notifier/notifiers/email_factory_test.py index ddbdd2098f..cda13059ef 100644 --- a/tests/notifier/notifiers/email_factory_test.py +++ b/tests/notifier/notifiers/email_factory_test.py @@ -14,7 +14,8 @@ """Tests for Email Factory""" -from google.cloud.forseti.common.util.email import email_factory, mailjet_connector +from google.cloud.forseti.common.util.email import email_factory +from google.cloud.forseti.common.util.email import mailjet_connector from google.cloud.forseti.common.util.email import sendgrid_connector from google.cloud.forseti.common.util.errors import InvalidInputError from tests.unittest_utils import ForsetiTestCase