import datetime 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 app.adapters.aws import secrets_manager from app.config import settings from app.types import CampaignSendCountry, CampaignSendTimezonesResponse class OwsTextCampaignsClient: service_name = "ows-text-campaigns" def __init__(self, ows_client: OwsClient) -> None: self.ows_client = ows_client def get_send_timezones( self, *, campaign_id: str, send_at: datetime.datetime ) -> list[CampaignSendCountry]: """Fetch the current quiet-hours status per (country, timezone) group present in the campaign's audience, as of `send_at`. """ response = self.ows_client.get( self.service_name, f"/campaigns/{campaign_id}/send-timezones", params={"sendAt": send_at.isoformat()}, timeout=15.0, ) return CampaignSendTimezonesResponse.model_validate_json( response.content ).countries 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)