from dataclasses import dataclass from anydi import singleton from fansifter_common.auth.requests import AuthRequest from email_campaigns.fonts.cache import GoogleFontsCache from email_campaigns.fonts.services.google_fonts import GoogleFont, GoogleFontsService _DEFAULT_LIMIT = 100 @dataclass(kw_only=True) class GetGoogleFontsRequest(AuthRequest): search: str | None = None limit: int = _DEFAULT_LIMIT @singleton class GetGoogleFontsHandler: def __init__( self, service: GoogleFontsService, cache: GoogleFontsCache, ) -> None: self.service = service self.cache = cache def handle(self, request: GetGoogleFontsRequest) -> list[GoogleFont]: if not self.cache.is_populated(): fonts = self.service.get_fonts() self.cache.populate(fonts) return self.cache.search(request.search, request.limit)