mirror of
https://github.com/GSA/notifications-api.git
synced 2026-02-02 17:31:14 -05:00
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:
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user