from typing import List import boto3 import structlog from dacite.core import from_dict from db_schema.schemas.slz import ContentStatus from slz_notification.entities import Metadata from slz_notification.sqs_service import SQSNotificationService from sqlalchemy.orm import Session from delphi_slz_admin.const import APP_NAME logger = structlog.get_logger(APP_NAME) class NotificationService: def __init__(self, db_session: Session) -> None: self.db_session = db_session self.sqs_service = SQSNotificationService(logger, boto3.client('sqs')) def push_content_statuses_metadata(self, content_status_ids: List[int]) -> List[int]: failed_ids = [] query = self.db_session.query(ContentStatus).filter( ContentStatus.content_status_id.in_(content_status_ids), ContentStatus.meta_data.isnot(None) ) content_statuses = query.with_entities( ContentStatus.content_status_id, ContentStatus.meta_data ).all() for content_status in content_statuses: metadata = from_dict(data_class=Metadata, data=content_status.meta_data) result, err = self.sqs_service.push(metadata) if not result and err: failed_ids.append(content_status.content_status_id) return failed_ids