From efa1c8a939b86f96086bac8a00b2dec8d2b19ad7 Mon Sep 17 00:00:00 2001 From: Josh Burman Date: Wed, 27 Oct 2021 02:16:07 +0000 Subject: [PATCH] added helpers to leverage for various libraries --- app/helpers/aws_helper.py | 37 ++++++++++++++++++++++++++++ app/helpers/csv_helper.py | 5 ++++ app/helpers/service_helper.py | 45 +++++++++++++++++++++++++++++++++++ app/helpers/tar_helper.py | 9 +++++++ 4 files changed, 96 insertions(+) create mode 100644 app/helpers/aws_helper.py create mode 100644 app/helpers/csv_helper.py create mode 100644 app/helpers/service_helper.py create mode 100644 app/helpers/tar_helper.py diff --git a/app/helpers/aws_helper.py b/app/helpers/aws_helper.py new file mode 100644 index 0000000..ecffc37 --- /dev/null +++ b/app/helpers/aws_helper.py @@ -0,0 +1,37 @@ +import boto3 +import os +import json + +session = boto3.Session( + aws_access_key_id=os.environ['SOLVER_AWS_ACCESS_KEY_ID'], + aws_secret_access_key=os.environ['SOLVER_AWS_SECRET_ACCESS_KEY'] +) + +s3 = session.resource('s3', region_name=os.environ['SOLVER_AWS_REGION']) +sqs = session.client('sqs', region_name=os.environ['SOLVER_AWS_REGION']) + +def get_key_from_message(message): + body = json.loads(message['Body']) + return body['Records'][0]['s3']['object']['key'] + +def get_object(key, bucket): + return s3.Object( + bucket_name=bucket, + key=key + ).get()['Body'].read() + +def file_stream_upload(buffer, name, bucket): + return s3.Bucket(bucket).upload_fileobj(buffer, name) + +def receive_message(queue, message_num=1, wait_time=1): + return sqs.receive_message( + QueueUrl=queue, + MaxNumberOfMessages=message_num, + WaitTimeSeconds=wait_time + ) + +def delete_message(queue, receipt): + return sqs.delete_message( + QueueUrl=queue, + ReceiptHandle=receipt + ) diff --git a/app/helpers/csv_helper.py b/app/helpers/csv_helper.py new file mode 100644 index 0000000..1f6699c --- /dev/null +++ b/app/helpers/csv_helper.py @@ -0,0 +1,5 @@ +import csv +import io + +def file_stream_reader(f): + return csv.reader(io.StringIO(f.read().decode('ascii'))) diff --git a/app/helpers/service_helper.py b/app/helpers/service_helper.py new file mode 100644 index 0000000..41c3e88 --- /dev/null +++ b/app/helpers/service_helper.py @@ -0,0 +1,45 @@ +import csv +import io + +def items_csv_to_dict(items_csv_reader): + items = [] + headers = [] + + # get headers and items + for key, row in enumerate(items_csv_reader): + if key == 0: + headers = row + else: + item = { 'attributes': [] } + + for key, col in enumerate(headers): + if key == 0: + item[col] = row[key] + elif key > 1: + item['attributes'].append({ + 'id': col, + 'value': row[key], + 'type': 'metadata' + }) + + items.append(item) + + return items + +def solution_to_file(buffer, total_form_items, forms): + wr = csv.writer(buffer, dialect='excel', delimiter=',') + + # write header row for first row utilizing the total items all forms will have + # and the cut score as the last item + header = [x + 1 for x in range(total_form_items)] + ['cut score'] + wr.writerow(header) + + # add each form as row to processed csv + for form in forms: + # provide generated items and cut score + row = form.items + [form.cut_score] + wr.writerow(row) + + buff2 = io.BytesIO(buffer.getvalue().encode()) + + return buff2 diff --git a/app/helpers/tar_helper.py b/app/helpers/tar_helper.py new file mode 100644 index 0000000..1bfc0f5 --- /dev/null +++ b/app/helpers/tar_helper.py @@ -0,0 +1,9 @@ +import io +import tarfile + +def raw_to_tar(raw_object): + tarball = io.BytesIO(raw_object) + return tarfile.open(fileobj=tarball, mode='r:gz') + +def extract_file_from_tar(tar, file_name): + return tar.extractfile(tar.getmember(file_name))