Use the correct bucket for storing contact lists

We don’t want to muddy them up with the normal CSV uploads.

I’ve tried to reuse the existing S3 code where possible because it’s
well tested.

Buckets have already been created.
This commit is contained in:
Chris Hill-Scott
2020-03-13 13:53:18 +00:00
parent 1c02476ee7
commit 03f2368deb
9 changed files with 121 additions and 47 deletions

View File

@@ -9,20 +9,20 @@ from app.s3_client.s3_logo_client import get_s3_object
FILE_LOCATION_STRUCTURE = 'service-{}-notify/{}.csv'
def get_csv_location(service_id, upload_id):
def get_csv_location(service_id, upload_id, bucket=None):
return (
current_app.config['CSV_UPLOAD_BUCKET_NAME'],
bucket or current_app.config['CSV_UPLOAD_BUCKET_NAME'],
FILE_LOCATION_STRUCTURE.format(service_id, upload_id),
)
def get_csv_upload(service_id, upload_id):
return get_s3_object(*get_csv_location(service_id, upload_id))
def get_csv_upload(service_id, upload_id, bucket=None):
return get_s3_object(*get_csv_location(service_id, upload_id, bucket))
def s3upload(service_id, filedata, region):
def s3upload(service_id, filedata, region, bucket=None):
upload_id = str(uuid.uuid4())
bucket_name, file_location = get_csv_location(service_id, upload_id)
bucket_name, file_location = get_csv_location(service_id, upload_id, bucket)
utils_s3upload(
filedata=filedata['data'],
region=region,
@@ -32,10 +32,10 @@ def s3upload(service_id, filedata, region):
return upload_id
def s3download(service_id, upload_id):
def s3download(service_id, upload_id, bucket=None):
contents = ''
try:
key = get_csv_upload(service_id, upload_id)
key = get_csv_upload(service_id, upload_id, bucket)
contents = key.get()['Body'].read().decode('utf-8')
except botocore.exceptions.ClientError as e:
current_app.logger.error("Unable to download s3 file {}".format(
@@ -44,11 +44,11 @@ def s3download(service_id, upload_id):
return contents
def set_metadata_on_csv_upload(service_id, upload_id, **kwargs):
def set_metadata_on_csv_upload(service_id, upload_id, bucket=None, **kwargs):
get_csv_upload(
service_id, upload_id
service_id, upload_id, bucket=bucket
).copy_from(
CopySource='{}/{}'.format(*get_csv_location(service_id, upload_id)),
CopySource='{}/{}'.format(*get_csv_location(service_id, upload_id, bucket=bucket)),
ServerSideEncryption='AES256',
Metadata={
key: str(value) for key, value in kwargs.items()
@@ -57,9 +57,18 @@ def set_metadata_on_csv_upload(service_id, upload_id, **kwargs):
)
def get_csv_metadata(service_id, upload_id):
def set_metadata_on_contact_list(service_id, upload_id, **kwargs):
return set_metadata_on_csv_upload(
service_id,
upload_id,
bucket=current_app.config['CONTACT_LIST_UPLOAD_BUCKET_NAME'],
**kwargs,
)
def get_csv_metadata(service_id, upload_id, bucket=None):
try:
key = get_csv_upload(service_id, upload_id)
key = get_csv_upload(service_id, upload_id, bucket)
return key.get()['Metadata']
except botocore.exceptions.ClientError as e:
current_app.logger.error("Unable to download s3 file {}".format(