from fansifter_common import context from fansifter_common.constants import PROD_ENVIRONMENT, QA_ENVIRONMENT from fansifter_common.m2m_token import M2MTokenManager from fansifter_common.utils.functional import lazy_proxy from owsclient import OwsClient from pydantic import RootModel from app.adapters.aws import secrets_manager from app.config import settings from app.types import PersonalizedAttributes, RenderedMessage RenderedMessages = RootModel[list[RenderedMessage]] class OwsTextCampaignsClient: service_name = "ows-text-campaigns" def __init__(self, ows_client: OwsClient) -> None: self.ows_client = ows_client def render_messages_batch( self, *, campaign_id: str, attributes: list[PersonalizedAttributes] ) -> list[RenderedMessage]: if not attributes: return [] response = self.ows_client.post( self.service_name, f"/campaigns/{campaign_id}/messages/batch-render", json={"personalized_attributes": attributes}, timeout=60.0, ) return RenderedMessages.model_validate_json(response.content).root def get_ows_text_campaigns_client() -> OwsTextCampaignsClient: if settings.environment in [QA_ENVIRONMENT, PROD_ENVIRONMENT]: m2m_token_manager: M2MTokenManager | None = M2MTokenManager( secrets_manager=secrets_manager, secret_name_key=settings.m2m_token_secret_key_name, secret_expire_name_key=settings.m2m_token_secret_expiry_key_name, ) else: m2m_token_manager = None ows_client = OwsClient( environment=settings.environment, service_name=settings.service_name, m2m_token_manager=m2m_token_manager, correlation_id_getter=context.get_correlation_id, request_context_getter=context.get_request_context, ) return OwsTextCampaignsClient(ows_client=ows_client) ows_text_campaigns_client = lazy_proxy(get_ows_text_campaigns_client)