import json import traceback import boto3 import sys from flask import request from botocore.exceptions import ClientError from utils.base64_parsing import base64_decode import config def get_session(): aws_access_key_id = config.AWS_ACCESS_KEY_ID aws_secret_access_key = config.AWS_SECRET_ACCESS_KEY session = boto3.session.Session(aws_access_key_id=aws_access_key_id, aws_secret_access_key=aws_secret_access_key) return session def s3_upload(cif, doc_name, doc_content, doc_format=None): try: s3 = get_session().resource('s3') bucket = s3.Bucket(config.AWS_BUCKET) if 'customer-details' in request.url: is_decoded, decoded_doc = base64_decode(doc_content, doc_format) if is_decoded: file_path = str(cif[0]) + '/' + doc_name + '.' + doc_format # using doc name set the file path else: return False, None elif 'get-jiffy-response' in request.url: decoded_doc = bytes(json.dumps(doc_content).encode('UTF-8')) file_path = cif + '/' + doc_name else: decoded_doc = json.dumps(doc_content) file_path = cif + '/' + doc_name obj = s3.Object(bucket.name, file_path) obj.put(Body=decoded_doc) return True except Exception as ex: print('Exception: ' + repr(ex), file=sys.stderr) raise ex def s3_check_exists(file_path): try: s3 = get_session().resource('s3') bucket = s3.Bucket(config.AWS_BUCKET) return s3.meta.client.head_object(Bucket=bucket.name, Key=file_path) except ClientError as ex: return False def s3_read_file(file_path): try: s3 = get_session().resource('s3') bucket = s3.Bucket(config.AWS_BUCKET) data = s3.meta.client.get_object(Bucket=bucket.name, Key=file_path) body = data['Body'].read().decode('utf-8') return body except Exception as ex: traceback.print_exc() print('Exception: ' + repr(ex), file=sys.stderr) raise ex