Refactor to make the new send_to_provider methods take a notification not a notification ID.

- Driven by the fact we won't know the type in the API call
- hence we need to load notification earlier , so pass it not the id through to the send task to avoid loading it twice.
This commit is contained in:
Martyn Inglis
2016-09-22 09:16:58 +01:00
parent 991cc884b4
commit 2f36e0dbcf
4 changed files with 33 additions and 44 deletions

View File

@@ -3,32 +3,31 @@ from flask import Blueprint, jsonify
from app.delivery import send_to_providers
from app.models import EMAIL_TYPE
from app.celery import provider_tasks
from sqlalchemy.orm.exc import NoResultFound
from app.dao import notifications_dao
delivery = Blueprint('delivery', __name__)
from app.errors import (
register_errors,
InvalidRequest
)
from app.errors import register_errors
register_errors(delivery)
@delivery.route('/deliver/notification/<uuid:notification_id>', methods=['POST'])
def send_notification_to_provider(notification_type, notification_id):
def send_notification_to_provider(notification_id):
if notification_type == EMAIL_TYPE:
notification = notifications_dao.get_notification_by_id(notification_id)
if not notification:
return jsonify(notification={"result": "error", "message": "No result found"}), 404
if notification.notification_type == EMAIL_TYPE:
send_response(send_to_providers.send_email_response, provider_tasks.deliver_email, notification_id, 'send-email')
else:
send_response(send_to_providers.send_sms_response, provider_tasks.deliver_sms, notification_id, 'send-sms')
return jsonify({}), 204
def send_response(send_call, task_call, notification_id, queue):
def send_response(send_call, task_call, notification, queue):
try:
send_call(notification_id)
except NoResultFound as e:
raise InvalidRequest(e, status_code=404)
send_call(notification)
except Exception as e:
task_call.apply_async((str(notification_id)), queue=queue)
task_call.apply_async((str(notification.id)), queue=queue)

View File

@@ -39,7 +39,7 @@ def send_sms_to_provider(notification):
provider.send_sms(
to=validate_and_format_phone_number(notification.to),
content=template.replaced,
reference=str(notification_id),
reference=str(notification.id),
sender=service.sms_sender
)
notification.billable_units = get_sms_fragment_count(template.replaced_content_count)
@@ -50,16 +50,15 @@ def send_sms_to_provider(notification):
dao_update_notification(notification)
current_app.logger.info(
"SMS {} sent to provider at {}".format(notification_id, notification.sent_at)
"SMS {} sent to provider at {}".format(notification.id, notification.sent_at)
)
delta_milliseconds = (datetime.utcnow() - notification.created_at).total_seconds() * 1000
statsd_client.timing("sms.total-time", delta_milliseconds)
def send_email_to_provider(notification_id):
notification = get_notification_by_id(notification_id)
def send_email_to_provider(notification):
service = dao_fetch_service_by_id(notification.service_id)
provider = provider_to_use(EMAIL_TYPE, notification_id)
provider = provider_to_use(EMAIL_TYPE, notification.id)
if notification.status == 'created':
template_dict = dao_get_template_by_id(notification.template_id, notification.template_version).__dict__
@@ -99,7 +98,7 @@ def send_email_to_provider(notification_id):
dao_update_notification(notification)
current_app.logger.info(
"Email {} sent to provider at {}".format(notification_id, notification.sent_at)
"Email {} sent to provider at {}".format(notification.id, notification.sent_at)
)
delta_milliseconds = (datetime.utcnow() - notification.created_at).total_seconds() * 1000
statsd_client.timing("email.total-time", delta_milliseconds)