Files
notifications-api/app/notifications/notifications_letter_callback.py

48 lines
1.3 KiB
Python
Raw Normal View History

from datetime import datetime
from flask import (
Blueprint,
jsonify,
request,
current_app,
json
)
from app import statsd_client
from app.celery.tasks import update_letter_notifications_statuses
from app.clients.email.aws_ses import get_aws_responses
from app.dao import (
notifications_dao
)
from app.notifications.process_client_response import validate_callback_data
letter_callback_blueprint = Blueprint('notifications_letter_callback', __name__)
from app.errors import (
register_errors,
InvalidRequest
)
register_errors(letter_callback_blueprint)
@letter_callback_blueprint.route('/notifications/letter/dvla', methods=['POST'])
def process_letter_response():
try:
req_json = json.loads(request.data)
# The callback should have one record for an S3 Put Event.
filename = req_json['Message']['Records'][0]['s3']['object']['key']
except (ValueError, KeyError):
error = "DVLA callback failed: Invalid JSON"
raise InvalidRequest(error, status_code=400)
else:
current_app.logger.info('DVLA callback: Calling task to update letter notifications')
update_letter_notifications_statuses.apply_async([filename], queue='notify')
return jsonify(
result="success", message="DVLA callback succeeded"
), 200