"""Logic layer for distribution emails.""" from datetime import datetime from typing import Any import flask from owsresponse import response, status as ows_status from notifications.connectors import ses from notifications.constants.email import ( DISTRIBUTION_CC, DISTRIBUTION_SCHEDULED_UPDATE_FAILED_SUBJECT, DISTRIBUTION_SCHEDULED_UPDATE_FAILED_TEMPLATE, DISTRIBUTION_SCHEDULED_UPDATE_PROCESSED_SUBJECT, DISTRIBUTION_SCHEDULED_UPDATE_PROCESSED_TEMPLATE, DISTRIBUTION_SCHEDULED_UPDATE_WARNING_SUBJECT, DISTRIBUTION_SCHEDULED_UPDATE_WARNING_TEMPLATE, DISTRIBUTION_WS_SCHEDULED_UPDATE_FAILED_TEMPLATE, DISTRIBUTION_WS_SCHEDULED_UPDATE_PROCESSED_TEMPLATE, ) def scheduled_update_processed(payload: dict[str, Any]) -> response.Response: """Send an email notifying that a scheduled metadata update completed.""" body = flask.render_template(DISTRIBUTION_SCHEDULED_UPDATE_PROCESSED_TEMPLATE, **payload) ses.send_html_email_bulk( subject=DISTRIBUTION_SCHEDULED_UPDATE_PROCESSED_SUBJECT.format( name=payload['product']['name'], upc=payload['product']['upc'] ), body=body, recipients=payload['recipients'], cc=[DISTRIBUTION_CC], ) return response.Response(message=body, status=ows_status.ACCEPTED) def scheduled_update_failed(payload: dict[str, Any]) -> response.Response: """Send an email notifying that a scheduled metadata update failed.""" body = flask.render_template(DISTRIBUTION_SCHEDULED_UPDATE_FAILED_TEMPLATE, **payload) ses.send_html_email_bulk( subject=DISTRIBUTION_SCHEDULED_UPDATE_FAILED_SUBJECT.format( name=payload['product']['name'], upc=payload['product']['upc'] ), body=body, recipients=payload['recipients'], cc=[DISTRIBUTION_CC], ) return response.Response(message=body, status=ows_status.ACCEPTED) def scheduled_update_warning(payload: dict[str, Any]) -> response.Response: """Send an email notifying that a scheduled metadata update will go out soon.""" process_at_datetime = datetime.strptime(payload['process_at'], '%Y-%m-%dT%H:%M:%SZ') payload['process_at'] = process_at_datetime.strftime('%I:%M%p GMT on %d %b %Y') body = flask.render_template(DISTRIBUTION_SCHEDULED_UPDATE_WARNING_TEMPLATE, **payload) ses.send_html_email_bulk( subject=DISTRIBUTION_SCHEDULED_UPDATE_WARNING_SUBJECT.format( name=payload['product']['name'], upc=payload['product']['upc'] ), body=body, recipients=payload['recipients'], cc=[DISTRIBUTION_CC], ) return response.Response(message=body, status=ows_status.ACCEPTED) def ws_scheduled_update_failed(payload: dict[str, Any]) -> response.Response: """Send an email notifying that a ws scheduled metadata update failed.""" body = flask.render_template(DISTRIBUTION_WS_SCHEDULED_UPDATE_FAILED_TEMPLATE, **payload) ses.send_html_email_bulk( subject=DISTRIBUTION_SCHEDULED_UPDATE_FAILED_SUBJECT.format( name=payload['product']['name'], upc=payload['product']['upc'] ), body=body, recipients=payload['recipients'], cc=[DISTRIBUTION_CC], ) return response.Response(message=body, status=ows_status.ACCEPTED) def ws_scheduled_update_processed(payload: dict[str, Any]) -> response.Response: """Send an email notifying that a ws scheduled metadata update processed.""" body = flask.render_template(DISTRIBUTION_WS_SCHEDULED_UPDATE_PROCESSED_TEMPLATE, **payload) ses.send_html_email_bulk( subject=DISTRIBUTION_SCHEDULED_UPDATE_PROCESSED_SUBJECT.format( name=payload['product']['name'], upc=payload['product']['upc'] ), body=body, recipients=payload['recipients'], cc=[DISTRIBUTION_CC], ) return response.Response(message=body, status=ows_status.ACCEPTED)