"""Lambda function module for replace_placeholder_upc.""" from common.connectors.mysql_connector import execute_mysql_query from common.constants.product_nfd import SME_ANALYTICS_DUMMY from common.constants.product_status import IN_CONTENT from common.schemas.state_machine_schema import StateMachineSchema import config from src.constants import graphql_queries, sql_queries logger = config.app_logger def handler(event, context): """replace_with_placeholder_upc handler.""" logger.info(f'Triggered replace_with_placeholder_upc: {event}') sm_context = StateMachineSchema().load(event) upc = sm_context.product.upc correlation_id = sm_context.correlation_id config.graphql_gateway.set_headers( { 'Orchard-User-Id': config.OA_USER, 'Correlation-Id': correlation_id, } ) placeholder_upc = get_placeholder_upc(upc) if placeholder_upc: logger.info(f'Found placeholder_upc {placeholder_upc} for upc: {upc}') display_upc = upc upc = placeholder_upc sm_context.placeholder_upc_ingestion = True else: product = get_product_by_upc(upc) logger.info(f'Get product by upc :{product} , upc : {upc}') if (product and product['notForDistribution'] != SME_ANALYTICS_DUMMY and (product['status'] != IN_CONTENT or product['deletions'] == 'Y')): # noqa logger.info( f'Product with UPC {upc} already exists, ' f'With notForDistribution : {product["notForDistribution"]} ' f'Release status is {product["status"]} ' 'Will insert product with new upc as placeholder') display_upc = upc upc = None sm_context.placeholder_upc_ingestion = True else: return StateMachineSchema().dump(sm_context) sm_context.product.upc = upc sm_context.product.display_upc = display_upc return StateMachineSchema().dump(sm_context) def get_placeholder_upc(upc): """Get placeholder upc if exists .""" query_args = ( upc ) result = execute_mysql_query( logger, config.RDS_HOST, config.RDS_DB_NAME, config.RDS_RW_USER, config.RDS_PASSWORD, sql_queries.GET_PLACEHOLDER_UPC, query_args, ) if result: return result[0].get('placeholder_upc') else: return None def get_product_by_upc(upc) -> dict: """Check if product already exists .""" graphql_result = config.graphql_gateway.execute( graphql_queries.GET_PRODUCT_BY_UPC, {'upc': upc}) return graphql_result['data']['productByUpc']