2020-06-01 17:08:30 +01:00
|
|
|
import json
|
2021-03-10 13:55:06 +00:00
|
|
|
from time import monotonic
|
2020-06-01 17:08:30 +01:00
|
|
|
|
|
|
|
|
from flask import current_app
|
|
|
|
|
from requests import request
|
|
|
|
|
|
2021-03-10 13:55:06 +00:00
|
|
|
from app.clients.email import EmailClient, EmailClientException
|
2020-06-01 17:08:30 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class AwsSesStubClientException(EmailClientException):
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class AwsSesStubClient(EmailClient):
|
|
|
|
|
def init_app(self, region, statsd_client, stub_url):
|
|
|
|
|
self.statsd_client = statsd_client
|
|
|
|
|
self.url = stub_url
|
|
|
|
|
|
2022-03-24 17:31:53 +00:00
|
|
|
@property
|
|
|
|
|
def name(self):
|
|
|
|
|
return 'ses'
|
2020-06-01 17:08:30 +01:00
|
|
|
|
|
|
|
|
def send_email(self,
|
|
|
|
|
source,
|
|
|
|
|
to_addresses,
|
|
|
|
|
subject,
|
|
|
|
|
body,
|
|
|
|
|
html_body='',
|
|
|
|
|
reply_to_address=None):
|
|
|
|
|
try:
|
|
|
|
|
start_time = monotonic()
|
|
|
|
|
response = request(
|
|
|
|
|
"POST",
|
|
|
|
|
self.url,
|
|
|
|
|
data={"id": "dummy-data"},
|
|
|
|
|
timeout=60
|
|
|
|
|
)
|
|
|
|
|
response.raise_for_status()
|
|
|
|
|
response_json = json.loads(response.text)
|
|
|
|
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
self.statsd_client.incr("clients.ses_stub.error")
|
|
|
|
|
raise AwsSesStubClientException(str(e))
|
|
|
|
|
else:
|
|
|
|
|
elapsed_time = monotonic() - start_time
|
|
|
|
|
current_app.logger.info("AWS SES stub request finished in {}".format(elapsed_time))
|
|
|
|
|
self.statsd_client.timing("clients.ses_stub.request-time", elapsed_time)
|
|
|
|
|
self.statsd_client.incr("clients.ses_stub.success")
|
|
|
|
|
return response_json['MessageId']
|