"""Lambda expiring_contracts function module.""" import boto3 from common_config import logger import config from constants import general import mysql import sql_queries import sqlalchemy from warmer_util import catch_warmer_event @catch_warmer_event() def handler(event, context): """Lambda entry point.""" expiring_contracts = get_expiring_contracts() if not expiring_contracts: return logger.error('There are no expiring Contract(s)') formatted_msg = format_sns_message(expiring_contracts) send_sns(formatted_msg) @mysql.wrap_db_errors def get_expiring_contracts(): """Get set of expiring_contracts details from AR. Returns: list: expiring_contracts details as dict """ with mysql.ar_db_session() as session: # execute query query = session.execute( sqlalchemy.text(sql_queries.OBTAIN_EXPIRING_CONTRACTS)) contracts = query.all() return [contract for contract in contracts] def format_sns_message(message): """Format message for SNS. Args: message (list): expiring_contracts details as dict Returns: string: expiring_contracts sns details as string """ response_list = [] for vendor in message: response_list.append( general.SNS_MAIL_STR.format( company=vendor.company, vendor_id=vendor.vendor_id)) response_str = '\n\n'.join(response_list) formatted_msg = '{header}\n\n{result}'.format( header=general.SNS_MAIL_HEADER, result=response_str) return formatted_msg def send_sns(message): """Publish message using AWS SNS. Args: message (string): expiring_contracts sns details as string """ sns = boto3.client(service_name='sns', region_name=config.AWS_REGION) return sns.publish( TopicArn=config.SNS_ARN, Message=message, Subject=general.SNS_ARN_SUBJECT)