Source code for google.cloud.forseti.common.util.email.base_email_connector

# Copyright 2017 The Forseti Security Authors. All rights reserved.
#
# Licensed 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.

"""Base email connector to select connector"""

from builtins import object
import abc
import os

from future.utils import with_metaclass
import jinja2

from google.cloud.forseti.common.util import logger

LOGGER = logger.get_logger(__name__)


[docs]class BaseEmailConnector(with_metaclass(abc.ABCMeta, object)): """Base email connector."""
[docs] @abc.abstractmethod def _execute_send(self, email): """Executes the sending of the email. This needs to be a standalone method so that we can wrap it with retry, and the final exception can be gracefully handled upstream. Args: email (mail): Connector mail object Returns: dict: urllib2 response """ pass
[docs] @abc.abstractmethod def send(self, email_sender=None, email_recipient=None, email_subject=None, email_content=None, content_type=None, attachment=None): """Send an email. This uses specific connector authentication details. The minimum required info to send email are: sender, recipient, subject, and content (the body) Args: email_sender (str): The email sender. email_recipient (str): The email recipient. email_subject (str): The email subject. email_content (str): The email content (aka, body). content_type (str): The email content type. attachment (Attachment): An Email Connector Attachment. Raises: EmailSendError: An error with sending email has occurred. """ pass
[docs] @classmethod @abc.abstractmethod def create_attachment(cls, file_location=None, content_type=None, filename=None, disposition='attachment', content_id=None): """Create an attachment. Args: file_location (str): The local path to the file. content_type (str): The content type of the attachment. disposition (str): Content disposition, defaults to "attachment". filename (str): The filename of attachment. content_id (str): The content id. Returns: Attachment: An Attachment. """ pass
[docs] @classmethod def render_from_template(cls, template_file, template_vars): """Fill out an email template with template variables. Args: template_file (str): The location of email template in filesystem. template_vars (dict): The template variables to fill into the template. Returns: str: The template content, rendered with the provided variables. """ template_searchpath = os.path.abspath( os.path.join(os.path.dirname(__file__), '../../email_templates')) template_loader = jinja2.FileSystemLoader( searchpath=template_searchpath) template_env = jinja2.Environment(loader=template_loader) template = template_env.get_template(template_file) return template.render(template_vars)