from typing import TYPE_CHECKING from src.constants import AppExecutionTypes, MainInvocationTypes from src.handlers.job_handler import schedule_all_playlists_sync from src.handlers.api_gateway_handler import api_gateway_handler if TYPE_CHECKING: from src.logger import BoundLogger def get_main_handler_event_type(event: dict, logger: "BoundLogger") -> MainInvocationTypes: if "httpMethod" in event: return MainInvocationTypes.API if "Records" in event: logger.debug(f"{AppExecutionTypes.MAIN} executor can only be directly invoked by API Gateway, WarmUp event " f"or Scheduler.\nReceived unsupported SQS event: {event}.") raise ValueError(f"Received unsupported SQS event: {event}.") return MainInvocationTypes.SCHEDULE_SYNC MAIN_EVENT_TYPE_TO_HANDLER = { MainInvocationTypes.API: api_gateway_handler, MainInvocationTypes.SCHEDULE_SYNC: schedule_all_playlists_sync, } def main_handler(event: dict, logger: "BoundLogger"): event_type = get_main_handler_event_type(event, logger) logger.info(f"{AppExecutionTypes.MAIN} executor is invoked by {event_type} event.\nEvent: {event}") return MAIN_EVENT_TYPE_TO_HANDLER[event_type](event, logger)