from datetime import datetime from typing import Any, Dict, List from marshmallow.exceptions import MarshmallowError from smelog.factory import BindableLogger from apollo_messages_views.config import FULL_APP_NAME from apollo_messages_views.schemas.factories import get_output_push_messages_schema def handler(events: List[Dict[str, Any]], logger: BindableLogger, current_dt: datetime = None): current_dt = current_dt or datetime.utcnow() output_events = [] for event in events: try: output_recipient_events = get_output_push_messages_schema( event["meta"]["type"], current_dt=current_dt ).dump_by_devices(event) output_events.extend(output_recipient_events) except MarshmallowError as ex: logger.error(f"{FULL_APP_NAME}.push_messages handler got broken event:\n" f"{ex}") return output_events