from anydi import singleton from cachelib import BaseCache as Cache from fansifter_common.email import EmailType from email_campaigns.config import settings @singleton class EmailPublicPreviewCache: """Cache for compressed email public previews.""" CACHE_TTL = 3600 # 1 hour def __init__(self, cache: Cache) -> None: self.cache = cache def get(self, email_id: str, email_type: EmailType) -> str | None: key = self._make_key(email_id, email_type) return self.cache.get(key) def set(self, email_id: str, email_type: EmailType, compressed_html: str) -> None: key = self._make_key(email_id, email_type) self.cache.set(key, compressed_html, timeout=self.CACHE_TTL) def delete(self, email_id: str, email_type: EmailType) -> None: key = self._make_key(email_id, email_type) self.cache.delete(key) @staticmethod def _make_key(email_id: str, email_type: EmailType) -> str: return ( f"{settings.cache_key_prefix}email_public_preview:{email_type}:{email_id}" )