Merge branch 'master' of https://github.com/alphagov/notifications-api into Inbound-sms-ip

This commit is contained in:
venusbb
2017-09-15 11:59:55 +01:00
8 changed files with 31 additions and 19 deletions

View File

@@ -1,17 +1,28 @@
from celery import Celery
from flask import current_app
from celery import Celery, Task
class NotifyTask(Task):
abstract = True
def on_failure(self, exc, task_id, args, kwargs, einfo):
# ensure task will log exceptions to correct handlers
current_app.logger.exception('Celery task failed')
super().on_failure(exc, task_id, args, kwargs, einfo)
def __call__(self, *args, **kwargs):
# ensure task has flask context to access config, logger, etc
with current_app.app_context():
return super().__call__(*args, **kwargs)
class NotifyCelery(Celery):
def init_app(self, app):
super().__init__(app.import_name, broker=app.config['BROKER_URL'])
super().__init__(
app.import_name,
broker=app.config['BROKER_URL'],
task_cls=NotifyTask,
)
self.conf.update(app.config)
TaskBase = self.Task
class ContextTask(TaskBase):
abstract = True
def __call__(self, *args, **kwargs):
with app.app_context():
return TaskBase.__call__(self, *args, **kwargs)
self.Task = ContextTask

View File

@@ -314,7 +314,7 @@ def populate_monthly_billing():
def run_letter_jobs():
job_ids = dao_get_letter_job_ids_by_status(JOB_STATUS_READY_TO_SEND)
notify_celery.send_task(
name=TaskNames.DVLA_FILES,
name=TaskNames.DVLA_JOBS,
args=(job_ids,),
queue=QueueNames.PROCESS_FTP
)

View File

@@ -48,7 +48,8 @@ class QueueNames(object):
class TaskNames(object):
DVLA_FILES = 'send-files-to-dvla'
DVLA_JOBS = 'send-jobs-to-dvla'
DVLA_NOTIFICATIONS = 'send-notifications-to-dvla'
class Config(object):
@@ -226,7 +227,7 @@ class Config(object):
},
'run-letter-jobs': {
'task': 'run-letter-jobs',
'schedule': crontab(minute=30, hour=17),
'schedule': crontab(hour=17, minute=30),
'options': {'queue': QueueNames.PERIODIC}
}
}

View File

@@ -16,7 +16,7 @@ register_errors(letter_job)
@letter_job.route('/send-letter-jobs', methods=['POST'])
def send_letter_jobs():
job_ids = validate(request.get_json(), letter_job_ids)
notify_celery.send_task(name=TaskNames.DVLA_FILES, args=(job_ids['job_ids'],), queue=QueueNames.PROCESS_FTP)
notify_celery.send_task(name=TaskNames.DVLA_JOBS, args=(job_ids['job_ids'],), queue=QueueNames.PROCESS_FTP)
return jsonify(data={"response": "Task created to send files to DVLA"}), 201

View File

@@ -151,7 +151,7 @@ def process_letter_notification(*, letter_data, api_key, template):
raise BadRequestError(message='Cannot send letters with a team api key', status_code=403)
if api_key.service.restricted and api_key.key_type != KEY_TYPE_TEST:
raise BadRequestError(message='Cannot send letters when service is in trial mode', status_code=403)
raise BadRequestError(message='Cannot send letters when service is in trial mode', status_code=403)
job = create_letter_api_job(template)
notification = create_letter_notification(letter_data, job, api_key)

View File

@@ -26,6 +26,6 @@ notifications-python-client==4.4.0
awscli>=1.11,<1.12
awscli-cwlogs>=1.4,<1.5
git+https://github.com/alphagov/notifications-utils.git@21.0.0#egg=notifications-utils==21.0.0
git+https://github.com/alphagov/notifications-utils.git@21.2.0#egg=notifications-utils==21.2.0
git+https://github.com/alphagov/boto.git@2.43.0-patch3#egg=boto==2.43.0-patch3

View File

@@ -690,6 +690,6 @@ def test_run_letter_jobs(client, mocker, sample_letter_template):
run_letter_jobs()
mock_celery.assert_called_once_with(name=TaskNames.DVLA_FILES,
mock_celery.assert_called_once_with(name=TaskNames.DVLA_JOBS,
args=(job_ids,),
queue=QueueNames.PROCESS_FTP)

View File

@@ -25,7 +25,7 @@ def test_send_letter_jobs(client, mocker, sample_letter_template):
assert response.status_code == 201
assert json.loads(response.get_data())['data'] == {'response': "Task created to send files to DVLA"}
mock_celery.assert_called_once_with(name="send-files-to-dvla",
mock_celery.assert_called_once_with(name="send-jobs-to-dvla",
args=(job_ids['job_ids'],),
queue="process-ftp-tasks")