From 3bd2565129fd232e1a987760e1052f98a381fc21 Mon Sep 17 00:00:00 2001 From: Adam Shimali Date: Fri, 5 Feb 2016 16:13:06 +0000 Subject: [PATCH] In case there are problems reading back the csv file from s3 bucket flash error message instead of stack trace from s3 client. --- app/main/uploader.py | 23 +++++++++++++++++------ app/main/views/sms.py | 4 ++++ 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/app/main/uploader.py b/app/main/uploader.py index a4b5c2102..bfecb75b8 100644 --- a/app/main/uploader.py +++ b/app/main/uploader.py @@ -2,9 +2,12 @@ import botocore from boto3 import resource +BUCKET_NAME = 'service-{}-notify' + + def s3upload(upload_id, service_id, filedata, region): s3 = resource('s3') - bucket_name = 'service-{}-notify'.format(service_id) + bucket_name = BUCKET_NAME.format(service_id) contents = '\n'.join(filedata['data']) exists = True @@ -25,9 +28,17 @@ def s3upload(upload_id, service_id, filedata, region): def s3download(service_id, upload_id): - s3 = resource('s3') - bucket_name = 'service-{}-notify'.format(service_id) - upload_file_name = "{}.csv".format(upload_id) - key = s3.Object(bucket_name, upload_file_name) - contents = key.get()['Body'].read().decode('utf-8') + contents = '' + try: + s3 = resource('s3') + bucket_name = BUCKET_NAME.format(service_id) + upload_file_name = "{}.csv".format(upload_id) + key = s3.Object(bucket_name, upload_file_name) + contents = key.get()['Body'].read().decode('utf-8') + except botocore.exceptions.ClientError as e: + err = e.response['Error'] + if err['Code'] == 'NoSuchBucket': + err_msg = '{}:{}'.format(err['BucketName'], err['Message']) + # TODO properly log error + print(err_msg) return contents diff --git a/app/main/views/sms.py b/app/main/views/sms.py index 28e44a06f..88108142b 100644 --- a/app/main/views/sms.py +++ b/app/main/views/sms.py @@ -1,5 +1,6 @@ import csv import uuid +import botocore from datetime import date @@ -88,7 +89,10 @@ def send_sms(service_id, template_id): def check_sms(service_id, upload_id): if request.method == 'GET': + contents = s3download(service_id, upload_id) + if not contents: + flash('There was a problem reading your upload file') upload_result = _get_numbers(contents) upload_data = session['upload_data'] original_file_name = upload_data.get('original_file_name')