You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
traktarr/helpers/sonarr.py

104 lines
3.5 KiB

from misc.log import logger
log = logger.get_logger(__name__)
def series_tag_id_from_network(profile_tags, network_tags, network):
try:
tags = []
for tag_name, tag_networks in network_tags.items():
for tag_network in tag_networks:
if tag_network.lower() in network.lower() and tag_name.lower() in profile_tags:
log.debug("Using %s tag for network: %s", tag_name, network)
tags.append(profile_tags[tag_name.lower()])
if tags:
return tags
except Exception:
log.exception("Exception determining tag to use for network %s: ", network)
return None
def readable_tag_from_ids(profile_tag_ids, chosen_tag_ids):
try:
if not chosen_tag_ids:
return None
tags = []
for tag_name, tag_id in profile_tag_ids.items():
if tag_id in chosen_tag_ids:
tags.append(tag_name)
if tags:
return tags
except Exception:
log.exception("Exception building readable tag name list from ids %s: ", chosen_tag_ids)
return None
def filter_trakt_series_list(trakt_series, callback):
new_series_list = []
try:
for tmp in trakt_series:
if 'show' not in tmp or 'ids' not in tmp['show'] or 'tvdb' not in tmp['show']['ids']:
log.debug("Removing shows from Trakt list as it did not have the required fields: %s", tmp)
if callback:
callback('movie', tmp)
continue
new_series_list.append(tmp)
return new_series_list
except Exception:
log.exception("Exception filtering Trakt shows list: ")
return None
def series_to_tvdb_dict(sonarr_series):
series = {}
try:
for tmp in sonarr_series:
if 'tvdbId' not in tmp:
log.debug("Could not handle show: %s", tmp['title'])
continue
series[tmp['tvdbId']] = tmp
return series
except Exception:
log.exception("Exception processing Sonarr shows to TVDB dict: ")
return None
def remove_existing_series(sonarr_series, trakt_series, callback=None):
new_series_list = []
if not sonarr_series or not trakt_series:
log.error("Inappropriate parameters were supplied.")
return None
try:
# clean up trakt_series list
trakt_series = filter_trakt_series_list(trakt_series, callback)
if not trakt_series:
return None
# turn sonarr series result into a dict with tvdb id as keys
processed_series = series_to_tvdb_dict(sonarr_series)
if not processed_series:
return None
# loop list adding to series that do not already exist
for tmp in trakt_series:
# check if show exists in processed_series
if tmp['show']['ids']['tvdb'] in processed_series:
show_year = str(tmp['show']['year']) if tmp['show']['year'] else '????'
log.debug("Removing existing show: \'%s (%s)\'", tmp['show']['title'], show_year)
if callback:
callback('show', tmp)
continue
new_series_list.append(tmp)
series_removed = len(trakt_series) - len(new_series_list)
log.debug("Filtered %d shows from Trakt list that were already in Sonarr.", series_removed)
return new_series_list
except Exception:
log.exception("Exception removing existing shows from Trakt list: ")
return None