"""Lambda overlap function module.""" from pathlib import Path from snowflake_connector import etl_connector from common_config import logger from connectors import sentry from constants import errors, slack_messages from models import reports import common_config import config import util def handler(event, context): """Lambda entry point.""" try: for record in event['Records']: xls_key = record['s3']['object']['key'] util.notify_slack(slack_messages.IMPORT_STARTED.format(xls_key)) xls_path = Path(xls_key) if xls_path.suffix.lower() != '.xlsx': logger.error(errors.INCORRECT_FILE_ERROR) util.notify_slack(slack_messages.INCORRECT_EXTENSION) continue csv_file_name = f'{xls_path.stem}.csv' import_date = util.get_date_from_report_key(xls_key) date_str = import_date.strftime('%Y-%m-%d') csv_key = f'{config.S3_PATH}/converted/{date_str}/{csv_file_name}' if util.convert_xsl_to_csv( common_config.S3_BUCKET, xls_key, csv_key): snowflake_executor = etl_connector.SnowflakeSQLExecutor( common_config.SNOWFLAKE_CONFIG) reports.import_overlap_report( snowflake_executor, date_str, csv_key, xls_key) util.notify_slack( slack_messages.IMPORT_SUCCESSFUL.format(xls_key)) else: logger.info(errors.FILE_DOES_NOT_EXIST.format(xls_key)) util.notify_slack( slack_messages.FILE_DOES_NOT_EXIST.format(xls_key)) return {'status': 'OK'} except Exception as e: exception_str = str(e) logger.exception(exception_str) sentry.capture_exception() util.notify_slack(slack_messages.IMPORT_FAILED.format(exception_str)) raise e