from __future__ import annotations from collections.abc import Iterable from typing import TYPE_CHECKING import boto3 from fansifter_common.utils.functional import lazy_proxy from resonance_engine.config import settings if TYPE_CHECKING: from types_boto3_sqs.type_defs import SendMessageBatchRequestEntryTypeDef _BATCH_SIZE = 10 # SQS hard limit for SendMessageBatch _client = lazy_proxy( lambda: boto3.client("sqs", region_name=settings.aws_region_name), ) def send_message(queue_url: str, body: str) -> None: _client.send_message( QueueUrl=queue_url, MessageBody=body, ) def send_messages_batch(queue_url: str, bodies: Iterable[str]) -> None: """Send many messages via SendMessageBatch (chunks of 10).""" entries: list[SendMessageBatchRequestEntryTypeDef] = [] for i, body in enumerate(bodies): entries.append({"Id": str(i), "MessageBody": body}) if len(entries) == _BATCH_SIZE: _client.send_message_batch(QueueUrl=queue_url, Entries=entries) entries = [] if entries: _client.send_message_batch(QueueUrl=queue_url, Entries=entries)