Refactor update to notifcations to be a bulk update. This is much better for performance.

This commit is contained in:
Rebecca Law
2017-04-07 10:59:12 +01:00
parent cf3eeb2120
commit 50a5bedcbf
3 changed files with 54 additions and 9 deletions

View File

@@ -24,7 +24,8 @@ from app.dao.jobs_dao import (
all_notifications_are_created_for_job,
dao_get_all_notifications_for_job,
dao_update_job_status)
from app.dao.notifications_dao import get_notification_by_id, dao_update_notification
from app.dao.notifications_dao import get_notification_by_id, dao_update_notification, \
dao_update_notifications_sent_to_dvla
from app.dao.provider_details_dao import get_current_provider
from app.dao.services_dao import dao_fetch_service_by_id, fetch_todays_total_message_count
from app.dao.templates_dao import dao_get_template_by_id
@@ -38,7 +39,7 @@ from app.models import (
JOB_STATUS_IN_PROGRESS,
JOB_STATUS_FINISHED,
JOB_STATUS_READY_TO_SEND,
JOB_STATUS_SENT_TO_DVLA, NOTIFICATION_SENDING)
JOB_STATUS_SENT_TO_DVLA, NOTIFICATION_SENDING, Notification)
from app.notifications.process_notifications import persist_notification
from app.service.utils import service_allowed_to_send_to
from app.statsd_decorators import statsd
@@ -298,14 +299,13 @@ def update_job_to_sent_to_dvla(self, job_id):
# This task will be called by the FTP app to update the job to sent to dvla
# and update all notifications for this job to sending, provider = DVLA
provider = get_current_provider(LETTER_TYPE)
notifications = dao_get_all_notifications_for_job(job_id)
for n in notifications:
n.status = NOTIFICATION_SENDING
n.sent_by = provider.identifier
dao_update_notification(n)
updated_count = dao_update_notifications_sent_to_dvla(job_id, provider.identifier)
dao_update_job_status(job_id, JOB_STATUS_SENT_TO_DVLA)
current_app.logger.info("Updated {} letter notifications to sending. "
"Updated {} job to {}".format(updated_count, job_id, JOB_STATUS_SENT_TO_DVLA))
def create_dvla_file_contents(job_id):
file_contents = '\n'.join(