From 19a755cc27e5ea42d32bd7febd9511eec8d2cb6c Mon Sep 17 00:00:00 2001 From: Mitchell Klijs Date: Thu, 10 May 2018 14:45:26 +0200 Subject: [PATCH] Refactor main file a bit --- traktarr.py | 247 +++++++++++++++++++--------------------------------- 1 file changed, 91 insertions(+), 156 deletions(-) diff --git a/traktarr.py b/traktarr.py index f7f5378..d4fcf81 100755 --- a/traktarr.py +++ b/traktarr.py @@ -62,13 +62,61 @@ def trakt_authentication(): from media.trakt import Trakt trakt = Trakt(cfg) - response = trakt.oauth_authentication() - - if response: + if trakt.oauth_authentication(): log.info("Authentication information saved; please restart the application") exit() +def validate_trakt(trakt, notifications): + if not trakt.validate_client_id(): + log.error("Aborting due to failure to validate Trakt API Key") + if notifications: + callback_notify({'event': 'error', 'reason': 'Failure to validate Trakt API Key'}) + exit() + else: + log.info("Validated Trakt API Key") + + +def validate_pvr(pvr, type, notifications): + if not pvr.validate_api_key(): + log.error("Aborting due to failure to validate %s URL / API Key", type) + if notifications: + callback_notify({'event': 'error', 'reason': 'Failure to validate %s URL / API Key' % type}) + return None + else: + log.info("Validated %s URL & API Key", type) + + +def get_profile_id(pvr, profile): + # retrieve profile id for requested profile + profile_id = pvr.get_profile_id(profile) + if not profile_id or not profile_id > 0: + log.error("Aborting due to failure to retrieve Profile ID for: %s", profile) + exit() + log.info("Retrieved Profile ID for %s: %d", profile, profile_id) + return profile_id + + +def get_profile_tags(pvr): + profile_tags = pvr.get_tags() + if profile_tags is None: + log.error("Aborting due to failure to retrieve Tag ID's") + exit() + log.info("Retrieved %d Tag ID's", len(profile_tags)) + return profile_tags + + +def get_objects(pvr, type, notifications): + objects_list = pvr.get_objects() + if not objects_list: + log.error("Aborting due to failure to retrieve %s shows list", type) + if notifications: + callback_notify({'event': 'error', 'reason': 'Failure to retrieve %s shows list' % type}) + exit() + log.info("Retrieved %s shows list, shows found: %d", type, len(objects_list)) + return objects_list + + ############################################################ # SHOWS ############################################################ @@ -86,36 +134,14 @@ def show(show_id, folder=None, no_search=False): if folder: cfg['sonarr']['root_folder'] = folder - # validate trakt api_key trakt = Trakt(cfg) - if not trakt.validate_client_id(): - log.error("Aborting due to failure to validate Trakt API Key") - return None - else: - log.info("Validated Trakt API Key") - - # validate sonarr url & api_key sonarr = Sonarr(cfg.sonarr.url, cfg.sonarr.api_key) - if not sonarr.validate_api_key(): - log.error("Aborting due to failure to validate Sonarr URL / API Key") - return None - else: - log.info("Validated Sonarr URL & API Key") - # retrieve profile id for requested profile - profile_id = sonarr.get_profile_id(cfg.sonarr.profile) - if not profile_id or not profile_id > 0: - log.error("Aborting due to failure to retrieve Profile ID for: %s", cfg.sonarr.profile) - return None - else: - log.info("Retrieved Profile ID for %s: %d", cfg.sonarr.profile, profile_id) + validate_trakt(trakt, False) + validate_pvr(sonarr, 'Sonarr', False) - # retrieve profile tags - profile_tags = sonarr.get_tags() - if profile_tags is None: - log.error("Aborting due to failure to retrieve Tag ID's") - else: - log.info("Retrieved %d Tag ID's", len(profile_tags)) + profile_id = get_profile_id(sonarr, cfg.sonarr.profile) + profile_tags = get_profile_tags(sonarr) # get trakt show trakt_show = trakt.get_show(show_id) @@ -128,8 +154,7 @@ def show(show_id, folder=None, no_search=False): trakt_show['year']) # determine which tags to use when adding this series - use_tags = sonarr_helper.series_tag_id_from_network(profile_tags, cfg.sonarr.tags, - trakt_show['network']) + use_tags = sonarr_helper.series_tag_id_from_network(profile_tags, cfg.sonarr.tags, trakt_show['network']) # add show to sonarr if sonarr.add_series(trakt_show['ids']['tvdb'], trakt_show['title'], trakt_show['ids']['slug'], profile_id, @@ -174,73 +199,29 @@ def shows(list_type, add_limit=0, add_delay=2.5, genre=None, folder=None, no_sea # validate trakt client_id trakt = Trakt(cfg) - if not trakt.validate_client_id(): - log.error("Aborting due to failure to validate Trakt API Key") - if notifications: - callback_notify({'event': 'abort', 'type': 'shows', 'list_type': list_type, - 'reason': 'Failure to validate Trakt API Key'}) - return None - else: - log.info("Validated Trakt API Key") - - # validate sonarr url & api_key sonarr = Sonarr(cfg.sonarr.url, cfg.sonarr.api_key) - if not sonarr.validate_api_key(): - log.error("Aborting due to failure to validate Sonarr URL / API Key") - if notifications: - callback_notify({'event': 'abort', 'type': 'shows', 'list_type': list_type, - 'reason': 'Failure to validate Sonarr URL / API Key'}) - return None - else: - log.info("Validated Sonarr URL & API Key") - # retrieve profile id for requested profile - profile_id = sonarr.get_profile_id(cfg.sonarr.profile) - if not profile_id or not profile_id > 0: - log.error("Aborting due to failure to retrieve Profile ID for: %s", cfg.sonarr.profile) - if notifications: - callback_notify({'event': 'abort', 'type': 'shows', 'list_type': list_type, - 'reason': 'Failure to retrieve Sonarr Profile ID of %s' % cfg.sonarr.profile}) - return None - else: - log.info("Retrieved Profile ID for %s: %d", cfg.sonarr.profile, profile_id) + validate_trakt(trakt, notifications) + validate_pvr(sonarr, 'Sonarr', notifications) - # retrieve profile tags - profile_tags = sonarr.get_tags() - if profile_tags is None: - log.error("Aborting due to failure to retrieve Tag ID's") - if notifications: - callback_notify({'event': 'abort', 'type': 'shows', 'list_type': list_type, - 'reason': "Failure to retrieve Sonarr Tag ID's"}) - return None - else: - log.info("Retrieved %d Tag ID's", len(profile_tags)) + profile_id = get_profile_id(sonarr, cfg.sonarr.profile) + profile_tags = get_profile_tags(sonarr) - # get sonarr series list - sonarr_series_list = sonarr.get_objects() - if not sonarr_series_list: - log.error("Aborting due to failure to retrieve Sonarr shows list") - if notifications: - callback_notify({'event': 'abort', 'type': 'shows', 'list_type': list_type, - 'reason': 'Failure to retrieve Sonarr shows list'}) - return None - else: - log.info("Retrieved Sonarr shows list, shows found: %d", len(sonarr_series_list)) + pvr_objects_list = get_objects(sonarr, 'Sonarr', notifications) # get trakt series list - trakt_series_list = None if list_type.lower() == 'anticipated': - trakt_series_list = trakt.get_anticipated_shows() + trakt_objects_list = trakt.get_anticipated_shows() elif list_type.lower() == 'trending': - trakt_series_list = trakt.get_trending_shows() + trakt_objects_list = trakt.get_trending_shows() elif list_type.lower() == 'popular': - trakt_series_list = trakt.get_popular_shows() + trakt_objects_list = trakt.get_popular_shows() elif list_type.lower() == 'watchlist': - trakt_series_list = trakt.get_watchlist_shows(authenticate_user) + trakt_objects_list = trakt.get_watchlist_shows(authenticate_user) else: - trakt_series_list = trakt.get_user_list_shows(list_type, authenticate_user) + trakt_objects_list = trakt.get_user_list_shows(list_type, authenticate_user) - if not trakt_series_list: + if not trakt_objects_list: log.error("Aborting due to failure to retrieve Trakt %s shows list", list_type) if notifications: callback_notify( @@ -248,10 +229,10 @@ def shows(list_type, add_limit=0, add_delay=2.5, genre=None, folder=None, no_sea 'reason': 'Failure to retrieve Trakt %s shows list' % list_type}) return None else: - log.info("Retrieved Trakt %s shows list, shows found: %d", list_type, len(trakt_series_list)) + log.info("Retrieved Trakt %s shows list, shows found: %d", list_type, len(trakt_objects_list)) # build filtered series list without series that exist in sonarr - processed_series_list = sonarr_helper.remove_existing_series(sonarr_series_list, trakt_series_list) + processed_series_list = sonarr_helper.remove_existing_series(pvr_objects_list, trakt_objects_list) if processed_series_list is None: log.error("Aborting due to failure to remove existing Sonarr shows from retrieved Trakt shows list") if notifications: @@ -284,7 +265,7 @@ def shows(list_type, add_limit=0, add_delay=2.5, genre=None, folder=None, no_sea # determine which tags to use when adding this series use_tags = sonarr_helper.series_tag_id_from_network(profile_tags, cfg.sonarr.tags, - series['show']['network']) + series['show']['network']) # add show to sonarr if sonarr.add_series(series['show']['ids']['tvdb'], series['show']['title'], series['show']['ids']['slug'], profile_id, cfg.sonarr.root_folder, use_tags, @@ -335,26 +316,12 @@ def movie(movie_id, folder=None, no_search=False): # validate trakt api_key trakt = Trakt(cfg) - if not trakt.validate_client_id(): - log.error("Aborting due to failure to validate Trakt API Key") - return None - else: - log.info("Validated Trakt API Key") - - # validate radarr url & api_key radarr = Radarr(cfg.radarr.url, cfg.radarr.api_key) - if not radarr.validate_api_key(): - log.error("Aborting due to failure to validate Radarr URL / API Key") - return None - else: - log.info("Validated Radarr URL & API Key") - # retrieve profile id for requested profile - profile_id = radarr.get_profile_id(cfg.radarr.profile) - if not profile_id or not profile_id > 0: - log.error("Aborting due to failure to retrieve Profile ID for: %s", cfg.radarr.profile) - else: - log.info("Retrieved Profile ID for %s: %d", cfg.radarr.profile, profile_id) + validate_trakt(trakt, False) + validate_pvr(radarr, 'Radarr', False) + + profile_id = get_profile_id(radarr, cfg.sonarr.profile) # get trakt movie trakt_movie = trakt.get_movie(movie_id) @@ -408,65 +375,30 @@ def movies(list_type, add_limit=0, add_delay=2.5, genre=None, folder=None, no_se # validate trakt api_key trakt = Trakt(cfg) - if not trakt.validate_client_id(): - log.error("Aborting due to failure to validate Trakt API Key") - if notifications: - callback_notify({'event': 'abort', 'type': 'movies', 'list_type': list_type, - 'reason': 'Failure to validate Trakt API Key'}) - return None - else: - log.info("Validated Trakt API Key") - - # validate radarr url & api_key radarr = Radarr(cfg.radarr.url, cfg.radarr.api_key) - if not radarr.validate_api_key(): - log.error("Aborting due to failure to validate Radarr URL / API Key") - if notifications: - callback_notify( - {'event': 'abort', 'type': 'movies', 'list_type': list_type, - 'reason': 'Failure to validate Radarr URL / API Key'}) - return None - else: - log.info("Validated Radarr URL & API Key") - # retrieve profile id for requested profile - profile_id = radarr.get_profile_id(cfg.radarr.profile) - if not profile_id or not profile_id > 0: - log.error("Aborting due to failure to retrieve Profile ID for: %s", cfg.radarr.profile) - if notifications: - callback_notify({'event': 'abort', 'type': 'movies', 'list_type': list_type, - 'reason': 'Failure to retrieve Radarr Profile ID of %s' % cfg.radarr.profile}) - return None - else: - log.info("Retrieved Profile ID for %s: %d", cfg.radarr.profile, profile_id) + validate_trakt(trakt, notifications) + validate_pvr(radarr, 'Radarr', notifications) - # get radarr movies list - radarr_movie_list = radarr.get_objects() - if not radarr_movie_list: - log.error("Aborting due to failure to retrieve Radarr movies list") - if notifications: - callback_notify({'event': 'abort', 'type': 'movies', 'list_type': list_type, - 'reason': 'Failure to retrieve Radarr movies list'}) - return None - else: - log.info("Retrieved Radarr movies list, movies found: %d", len(radarr_movie_list)) + profile_id = get_profile_id(radarr, cfg.sonarr.profile) + + pvr_objects_list = get_objects(radarr, 'Radarr', notifications) # get trakt movies list - trakt_movies_list = None if list_type.lower() == 'anticipated': - trakt_movies_list = trakt.get_anticipated_movies() + trakt_objects_list = trakt.get_anticipated_movies() elif list_type.lower() == 'trending': - trakt_movies_list = trakt.get_trending_movies() + trakt_objects_list = trakt.get_trending_movies() elif list_type.lower() == 'popular': - trakt_movies_list = trakt.get_popular_movies() + trakt_objects_list = trakt.get_popular_movies() elif list_type.lower() == 'boxoffice': - trakt_movies_list = trakt.get_boxoffice_movies() + trakt_objects_list = trakt.get_boxoffice_movies() elif list_type.lower() == 'watchlist': - trakt_movies_list = trakt.get_watchlist_movies(authenticate_user) + trakt_objects_list = trakt.get_watchlist_movies(authenticate_user) else: - trakt_movies_list = trakt.get_user_list_movies(list_type, authenticate_user) + trakt_objects_list = trakt.get_user_list_movies(list_type, authenticate_user) - if not trakt_movies_list: + if not trakt_objects_list: log.error("Aborting due to failure to retrieve Trakt %s movies list", list_type) if notifications: callback_notify( @@ -474,10 +406,10 @@ def movies(list_type, add_limit=0, add_delay=2.5, genre=None, folder=None, no_se 'reason': 'Failure to retrieve Trakt %s movies list' % list_type}) return None else: - log.info("Retrieved Trakt %s movies list, movies found: %d", list_type, len(trakt_movies_list)) + log.info("Retrieved Trakt %s movies list, movies found: %d", list_type, len(trakt_objects_list)) # build filtered movie list without movies that exist in radarr - processed_movies_list = radarr_helper.remove_existing_movies(radarr_movie_list, trakt_movies_list) + processed_movies_list = radarr_helper.remove_existing_movies(pvr_objects_list, trakt_objects_list) if processed_movies_list is None: log.error("Aborting due to failure to remove existing Radarr movies from retrieved Trakt movies list") if notifications: @@ -556,6 +488,9 @@ def callback_notify(data): elif data['event'] == 'abort': notify.send(message="Aborted adding Trakt %s %s due to: %s" % (data['list_type'], data['type'], data['reason'])) return + elif data['event'] == 'error': + notify.send(message="Error: %s" % data['reason']) + return else: log.error("Unexpected callback: %s", data) return