From 94075b14a830b5f25299952263e41e5e275c6e2c Mon Sep 17 00:00:00 2001 From: aj Date: Sun, 28 Jun 2020 10:05:40 +0100 Subject: [PATCH] including fmframework network exceptions --- spotfm/charts/chart.py | 37 ++++++++++++++++-------------- spotfm/engine/chart_source.py | 18 +++++++-------- spotfm/maths/counter.py | 42 ++++++++++++++--------------------- spotfm/maths/stats.py | 8 +++++-- 4 files changed, 51 insertions(+), 54 deletions(-) diff --git a/spotfm/charts/chart.py b/spotfm/charts/chart.py index 5ef0c9b..31d65f9 100644 --- a/spotfm/charts/chart.py +++ b/spotfm/charts/chart.py @@ -1,6 +1,6 @@ from spotframework.net.network import Network as SpotNetwork, SpotifyNetworkException from spotframework.model.uri import Uri -from fmframework.net.network import Network as FmNetwork +from fmframework.net.network import Network as FmNetwork, LastFMNetworkException import logging logger = logging.getLogger(__name__) @@ -13,21 +13,24 @@ def get_chart_of_spotify_tracks(spotnet: SpotNetwork, username: str = None): logger.info(f'pulling {period.name} chart') - chart = fmnet.get_top_tracks(period=period, username=username, limit=limit) + try: + chart = fmnet.get_top_tracks(period=period, username=username, limit=limit) - spotify_chart = [] - for track in chart: - try: - spotify_search = spotnet.search(query_types=[Uri.ObjectType.track], - track=track.name, - artist=track.artist.name, - response_limit=5).tracks - if len(spotify_search) > 0: - spotify_chart.append(spotify_search[0]) - else: - logger.debug('no search tracks returned') - except SpotifyNetworkException as e: - logger.error(f'error during search function - {e}') - - return spotify_chart + spotify_chart = [] + for track in chart: + try: + spotify_search = spotnet.search(query_types=[Uri.ObjectType.track], + track=track.name, + artist=track.artist.name, + response_limit=5).tracks + if len(spotify_search) > 0: + spotify_chart.append(spotify_search[0]) + else: + logger.debug('no search tracks returned') + except SpotifyNetworkException as e: + logger.error(f'error during search function - {e}') + return spotify_chart + except LastFMNetworkException as e: + logger.error(f'error during chart retrieval function - {e}') + return [] diff --git a/spotfm/engine/chart_source.py b/spotfm/engine/chart_source.py index c2b9500..43d3644 100644 --- a/spotfm/engine/chart_source.py +++ b/spotfm/engine/chart_source.py @@ -1,4 +1,4 @@ -from fmframework.net.network import Network as FmNet +from fmframework.net.network import Network as FmNet, LastFMNetworkException from spotframework.net.network import Network as SpotNet from spotframework.model.uri import Uri @@ -33,12 +33,10 @@ class ChartSource(TrackSource): def process(self, params: Params, uris: List[Uri] = None): # TODO add processor support? - tracks = get_chart_of_spotify_tracks(spotnet=self.net, - fmnet=self.fmnet, - period=params.chart_range, - limit=params.limit) - - if tracks is not None and len(tracks) > 0: - return tracks - else: - logger.error('no tracks returned') + try: + return get_chart_of_spotify_tracks(spotnet=self.net, + fmnet=self.fmnet, + period=params.chart_range, + limit=params.limit) + except LastFMNetworkException as e: + logger.error(f'error occured during chart retrieval - {e}') diff --git a/spotfm/maths/counter.py b/spotfm/maths/counter.py index c0e2eda..5668073 100644 --- a/spotfm/maths/counter.py +++ b/spotfm/maths/counter.py @@ -5,7 +5,7 @@ from spotframework.model.album import SimplifiedAlbum from spotframework.model.artist import SimplifiedArtist from spotframework.model.uri import Uri -from fmframework.net.network import Network as FMNetwork +from fmframework.net.network import Network as FMNetwork, LastFMNetworkException import logging @@ -96,15 +96,13 @@ class Counter: logger.error(f'error occured during track retrieval - {e}') return 0 - if username is not None: - fmtrack = self.fmnet.get_track(name=track.name, artist=track.artists[0].name, username=username) - else: - fmtrack = self.fmnet.get_track(name=track.name, artist=track.artists[0].name, username=self.fmnet.username) - - if fmtrack is not None: + try: + fmtrack = self.fmnet.get_track(name=track.name, + artist=track.artists[0].name, + username=username or self.fmnet.username) return fmtrack.user_scrobbles - else: - logger.error(f'no album returned for {track}') + except LastFMNetworkException as e: + logger.error(f'error occured during track retrieval - {e}') return 0 def count_album(self, username: str = None, uri: Uri = None, album: SimplifiedAlbum = None) -> int: @@ -121,15 +119,13 @@ class Counter: logger.error(f'error occured during album retrieval - {e}') return 0 - if username is not None: - fmalbum = self.fmnet.get_album(name=album.name, artist=album.artists[0].name, username=username) - else: - fmalbum = self.fmnet.get_album(name=album.name, artist=album.artists[0].name, username=self.fmnet.username) - - if fmalbum is not None: + try: + fmalbum = self.fmnet.get_album(name=album.name, + artist=album.artists[0].name, + username=username or self.fmnet.username) return fmalbum.user_scrobbles - else: - logger.error(f'no album returned for {album}') + except LastFMNetworkException as e: + logger.error(f'error occured during album retrieval - {e}') return 0 def count_artist(self, username: str = None, uri: Uri = None, artist: SimplifiedArtist = None) -> int: @@ -146,13 +142,9 @@ class Counter: logger.error(f'error occured during artist retrieval - {e}') return 0 - if username is not None: - fmartist = self.fmnet.get_artist(name=artist.name, username=username) - else: - fmartist = self.fmnet.get_artist(name=artist.name, username=self.fmnet.username) - - if fmartist is not None: + try: + fmartist = self.fmnet.get_artist(name=artist.name, username=username or self.fmnet.username) return fmartist.user_scrobbles - else: - logger.error(f'no artist returned for {artist}') + except LastFMNetworkException as e: + logger.error(f'error occured during artist retrieval - {e}') return 0 diff --git a/spotfm/maths/stats.py b/spotfm/maths/stats.py index c70f44a..7e83f89 100644 --- a/spotfm/maths/stats.py +++ b/spotfm/maths/stats.py @@ -5,7 +5,7 @@ import json from spotframework.net.network import Network as Spotnet from spotframework.engine.playlistengine import PlaylistEngine from spotframework.model.uri import Uri -from fmframework.net.network import Network as Fmnet +from fmframework.net.network import Network as Fmnet, LastFMNetworkException from spotfm.maths.counter import Counter logger = logging.getLogger(__name__) @@ -29,7 +29,11 @@ class Stats(Cmd): if in_string is None or len(in_string) < 2: in_string = input('uri group/uri>') - user_total = self.fmnet.get_user_scrobble_count() + try: + user_total = self.fmnet.get_user_scrobble_count() + except LastFMNetworkException as e: + logger.error(f'error occured during scrobble count retrieval - {e}') + user_total = 0 total = 0 try: