"""Lambda delete_product function module.""" import json from typing import Any import pydantic from lambdacommon.common_config import logger from src.connectors import ows_utils from src.schemas.delete_request import DeleteRequest SUCCESS_STATUS = "success" FAILURE_STATUS = "failure" response_template = { "statusCode": 200, "headers": { "Content-Type": "application/json", }, "isBase64Encoded": False, } def generate_body(status: str, error: Any) -> dict[str, Any]: if status == SUCCESS_STATUS: response_template["body"] = json.dumps( { "data": [ [0, {"status": status}], ] } ) else: response_template["body"] = json.dumps( { "data": [ [0, {"status": status, "error": error}], ] } ) return response_template def handle(upc: str) -> str: ows_utils.delete_product(upc) return SUCCESS_STATUS def handler(event: dict[str, Any], context: Any) -> dict[str, Any]: """Lambda entry point.""" try: logger.info(f"Event ${event}") delete_request: DeleteRequest = DeleteRequest.model_validate( json.loads(event["body"]) ) upc = delete_request.upc product = ows_utils.get_product_by_upc(upc) not_for_distribution = product["not_for_distribution"] if not_for_distribution != "SMEAnalyticsDummy": raise ValueError(f"Product upc: {upc} is not SMEAnalyticsDummy") handle(upc) return generate_body(SUCCESS_STATUS, None) except pydantic.ValidationError: logger.exception("Invalid payload received") return generate_body(FAILURE_STATUS, "INVALID_EVENT") except Exception as error: return generate_body(FAILURE_STATUS, str(error))