From 41065247103bce9e9f2efc86e0288b7ea3e3fab1 Mon Sep 17 00:00:00 2001 From: Kamil Date: Tue, 10 Dec 2024 15:41:44 +0000 Subject: [PATCH] add caching for fetching provider playlists to reduce API calls and increase loading speed in UI --- app/functions.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/app/functions.py b/app/functions.py index 7f83cd8..d0cc7e5 100644 --- a/app/functions.py +++ b/app/functions.py @@ -112,6 +112,22 @@ def get_cached_provider_track(track_id : str,provider_id : str)-> base.Track: app.logger.error(f"Error fetching track {track_id} from {provider_id}: {str(e)}") return None +@cache.memoize(timeout=3600) +def get_cached_provider_playlist(playlist_id : str,provider_id : str)-> base.Playlist: + """ + Fetches a playlist by its ID, utilizing caching to minimize API calls. + + :param playlist_id: The playlist ID. + :return: Playlist data as a dictionary, or None if an error occurs. + """ + try: + # get the provider from the registry + provider = MusicProviderRegistry.get_provider(provider_id) + playlist_data = provider.get_playlist(playlist_id) + return playlist_data + except Exception as e: + app.logger.error(f"Error fetching playlist {playlist_id} from {provider_id}: {str(e)}") + return None def get_tracks_for_playlist(data: List[PlaylistTrack], provider_id : str ) -> List[CombinedTrackData]: is_admin = session.get('is_admin', False)