from anydi import singleton from email_campaigns.adapters.db import Repository from email_campaigns.adapters.stripo import AutomatedStripoClientV2 from email_campaigns.automated.models import AutomatedEmail from email_campaigns.emails.cache import EmailPublicPreviewCache from email_campaigns.emails.canonicalize import canonicalize from email_campaigns.emails.handlers import ( AutosaveEmailV2Handler, AutosaveEmailV2Request, ) @singleton class AutosaveAutomatedEmailV2Handler(AutosaveEmailV2Handler[AutomatedEmail]): def __init__( self, email_repository: Repository[AutomatedEmail], preview_cache: EmailPublicPreviewCache, stripo_client: AutomatedStripoClientV2, ) -> None: super().__init__( email_repository=email_repository, preview_cache=preview_cache, stripo_client=stripo_client, ) def handle(self, request: AutosaveEmailV2Request) -> None: email = self.email_repository.get(request.email_id) if email is not None and email.is_automated: self.authenticate(request) response = self.stripo_client.get_html_css( email_id=request.email_id, user_id=request.user_id, ) email.has_unapplied_changes = canonicalize( response.html, response.css ) != canonicalize(email.html_content, email.css_content) email.updated_by = request.user_id self.email_repository.save(email) return super().handle(request)