"""Lambda phf-sales-data-verify function module.""" import os import file_validator import lambda_exceptions import s3 import util from constants import errors from constants import general from warmer_util import catch_warmer_event @catch_warmer_event() @util.handle_lambda_result( lambda_name=general.LAMBDA_NAME, default_error_code=errors.FILE_VERIFICATION_ERROR_CODE) def handler(event, context): """Lambda entry point.""" status = 200 bucket, key = 'Bucket is not identified', 'Key is not identified' s3_object = {'key': key, 'bucket': bucket} error_code = None error_description = [] try: bucket, key = util.extract_triggered_key(event) s3_object = {'key': key, 'bucket': bucket} if not s3.object_exists(bucket, key): error_code = errors.S3_FILE_NOT_FOUND_CODE lambda_exceptions.notify_and_raise( general.LAMBDA_NAME, errors.INVALID_DATA_ERROR_STATUS, error_code, key, bucket, {'key': key, 'bucket': bucket} ) if not file_validator.is_valid_file_type(key): file_name, file_extension = os.path.splitext(key) error_code = errors.WRONG_FILE_TYPE_ERROR_CODE lambda_exceptions.notify_and_raise( general.LAMBDA_NAME, errors.INVALID_DATA_ERROR_STATUS, error_code, key, bucket, { 'key': key, 'bucket': bucket, 'extension': file_extension } ) input_object = s3.head_object(bucket, key) file_size = input_object.get('ContentLength') if not file_validator.is_valid_file_size(file_size): error_code = errors.WRONG_FILE_SIZE_ERROR_CODE lambda_exceptions.notify_and_raise( general.LAMBDA_NAME, errors.INVALID_DATA_ERROR_STATUS, error_code, key, bucket, { 'key': key, 'bucket': bucket, 'size': file_size } ) return { 'status': status, 's3_object': s3_object, 'error_code': error_code, 'error_description': error_description or None} except lambda_exceptions.LoggedException as e: error_description = [str(e)] status = 400 return { 'status': status, 's3_object': s3_object, 'error_code': error_code, 'error_description': error_description or None}