"""Lambda create_vectorapi_access_tokens_sme_analytics function module.""" from config import app_logger as logger from marshmallow import EXCLUDE from pymysql import OperationalError import constants.general as constants from helpers.mysql_utils import execute_query from src.schemas.create_vectorapi_schema import CreateVectorapiAccessToken class RetryException(Exception): """Retry Exception.""" pass def get_user_id(vendor: dict) -> dict: """Get user id from vend_contact table of vendor contact.""" user_id = execute_query( constants.GET_VENDOR_CONTACT_SQL, vendor) return {'user_id': user_id[0]['id']} if user_id else {} def handler(event, context): """Lambda entry point.""" input_data = event or {} try: # validate input and exclude extra properties that are not in schema. vendor = CreateVectorapiAccessToken().load(input_data, unknown=EXCLUDE) logger.info(f'Checking vendor contact: {vendor}') user_id = get_user_id(vendor) if not user_id: # create vendor contact if it does not exist execute_query(constants.CREATE_VENDOR_CONTACT_SQL, vendor) user_id = get_user_id(vendor) logger.info('Vendor contact created.') logger.info(f'Checking access token: {user_id}') check_access_token = execute_query( constants.GET_ACCESS_TOKEN_SQL, user_id) if not check_access_token: # create access token if it does not exist execute_query( constants.CREATE_ACCESS_TOKEN_SQL, user_id) logger.info('Access token created.') return {'message': 'Success'} except OperationalError as err: raise RetryException('MySQL connection issue.', err)