added helpers to leverage for various libraries

This commit is contained in:
Josh Burman 2021-10-27 02:16:07 +00:00
parent 7e2305cc91
commit efa1c8a939
4 changed files with 96 additions and 0 deletions

37
app/helpers/aws_helper.py Normal file
View File

@ -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
)

View File

@ -0,0 +1,5 @@
import csv
import io
def file_stream_reader(f):
return csv.reader(io.StringIO(f.read().decode('ascii')))

View File

@ -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

View File

@ -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))