"""Lambda reconfirmation function module.""" from pathlib import Path from snowflake_connector import etl_connector import common_config import config from connectors import sentry from constants import errors, slack_messages from models import reports import util def handler(event, context): """Lambda entry point. Args: event (dict): Information about uploaded xsls file. context (dict): Environment state. Returns: dict: Dict with results. """ try: for record in event['Records']: bucket = record['s3']['bucket']['name'] 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': common_config.logger.error(errors.INCORRECT_FILE_ERROR) util.notify_slack(slack_messages.INCORRECT_EXTENSION) continue date = util.get_date_from_report_key(xls_key) date_str = date.strftime('%Y_%m_%d') csv_file_name = f'{xls_path.stem}.csv' csv_key = f'{config.S3_PATH}/converted/{date_str}/{csv_file_name}' if util.convert_xsl_to_csv(bucket, xls_key, csv_key): snowflake_executor = etl_connector.SnowflakeSQLExecutor( common_config.SNOWFLAKE_CONFIG) reports.import_reconfirmation_report( snowflake_executor, date.strftime('%Y-%m-%d'), csv_key, xls_key) util.notify_slack( slack_messages.IMPORT_SUCCESSFUL.format(xls_key)) else: common_config.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) common_config.logger.exception(exception_str) sentry.capture_exception() util.notify_slack(slack_messages.IMPORT_FAILED.format(exception_str)) raise e