mirror of https://github.com/morpheus65535/bazarr
Improved how Bazarr get Sonarr/Radarr version to use caching and reduce the number of calls made to their respective API.
This commit is contained in:
parent
bf037f1573
commit
842dbf0827
|
@ -12,10 +12,10 @@ from pyga.entities import CustomVariable
|
|||
|
||||
from get_args import args
|
||||
from config import settings
|
||||
from utils import get_sonarr_version, get_radarr_version
|
||||
from utils import get_sonarr_info, get_radarr_info
|
||||
|
||||
sonarr_version = get_sonarr_version()
|
||||
radarr_version = get_radarr_version()
|
||||
sonarr_version = get_sonarr_info.version()
|
||||
radarr_version = get_radarr_info.version()
|
||||
|
||||
|
||||
def track_event(category=None, action=None, label=None):
|
||||
|
|
|
@ -39,7 +39,7 @@ from notifier import send_notifications, send_notifications_movie
|
|||
from list_subtitles import store_subtitles, store_subtitles_movie, series_scan_subtitles, movies_scan_subtitles, \
|
||||
list_missing_subtitles, list_missing_subtitles_movies
|
||||
from utils import history_log, history_log_movie, blacklist_log, blacklist_delete, blacklist_delete_all, \
|
||||
blacklist_log_movie, blacklist_delete_movie, blacklist_delete_all_movie, get_sonarr_version, get_radarr_version, \
|
||||
blacklist_log_movie, blacklist_delete_movie, blacklist_delete_all_movie, get_sonarr_info, get_radarr_info, \
|
||||
delete_subtitles, subtitles_apply_mods, translate_subtitles_file, check_credentials, get_health_issues
|
||||
from get_providers import get_providers, get_providers_auth, list_throttled_providers, reset_throttled_providers, \
|
||||
get_throttled_providers, set_throttled_providers
|
||||
|
@ -600,8 +600,8 @@ class SystemStatus(Resource):
|
|||
def get(self):
|
||||
system_status = {}
|
||||
system_status.update({'bazarr_version': os.environ["BAZARR_VERSION"]})
|
||||
system_status.update({'sonarr_version': get_sonarr_version()})
|
||||
system_status.update({'radarr_version': get_radarr_version()})
|
||||
system_status.update({'sonarr_version': get_sonarr_info.version()})
|
||||
system_status.update({'radarr_version': get_radarr_info.version()})
|
||||
system_status.update({'operating_system': platform.platform()})
|
||||
system_status.update({'python_version': platform.python_version()})
|
||||
system_status.update({'bazarr_directory': os.path.dirname(os.path.dirname(__file__))})
|
||||
|
|
|
@ -6,7 +6,7 @@ import logging
|
|||
import string
|
||||
|
||||
from config import settings, url_sonarr, url_radarr
|
||||
from utils import get_sonarr_version, get_radarr_version
|
||||
from utils import get_sonarr_info, get_radarr_info
|
||||
|
||||
headers = {"User-Agent": os.environ["SZ_USER_AGENT"]}
|
||||
|
||||
|
@ -46,10 +46,9 @@ def browse_bazarr_filesystem(path='#'):
|
|||
|
||||
|
||||
def browse_sonarr_filesystem(path='#'):
|
||||
sonarr_version = get_sonarr_version()
|
||||
if path == '#':
|
||||
path = ''
|
||||
if sonarr_version.startswith(('0.', '2.')):
|
||||
if get_sonarr_info.is_legacy():
|
||||
url_sonarr_api_filesystem = url_sonarr() + "/api/filesystem?path=" + path + \
|
||||
"&allowFoldersWithoutTrailingSlashes=true&includeFiles=false&apikey=" + \
|
||||
settings.sonarr.apikey
|
||||
|
@ -77,11 +76,10 @@ def browse_sonarr_filesystem(path='#'):
|
|||
|
||||
|
||||
def browse_radarr_filesystem(path='#'):
|
||||
radarr_version = get_radarr_version()
|
||||
if path == '#':
|
||||
path = ''
|
||||
|
||||
if radarr_version.startswith('0'):
|
||||
if get_radarr_info.is_legacy():
|
||||
url_radarr_api_filesystem = url_radarr() + "/api/filesystem?path=" + path + \
|
||||
"&allowFoldersWithoutTrailingSlashes=true&includeFiles=false&apikey=" + \
|
||||
settings.radarr.apikey
|
||||
|
|
|
@ -12,7 +12,7 @@ from helper import path_mappings
|
|||
from list_subtitles import store_subtitles, series_full_scan_subtitles
|
||||
from get_subtitle import episode_download_subtitles
|
||||
from event_handler import event_stream, show_progress, hide_progress
|
||||
from utils import get_sonarr_version
|
||||
from utils import get_sonarr_info
|
||||
|
||||
headers = {"User-Agent": os.environ["SZ_USER_AGENT"]}
|
||||
|
||||
|
@ -25,7 +25,6 @@ def update_all_episodes():
|
|||
def sync_episodes(series_id=None, send_event=True):
|
||||
logging.debug('BAZARR Starting episodes sync from Sonarr.')
|
||||
apikey_sonarr = settings.sonarr.apikey
|
||||
sonarr_version = get_sonarr_version()
|
||||
|
||||
# Get current episodes id in DB
|
||||
current_episodes_db = TableEpisodes.select(TableEpisodes.sonarrEpisodeId,
|
||||
|
@ -42,8 +41,7 @@ def sync_episodes(series_id=None, send_event=True):
|
|||
altered_episodes = []
|
||||
|
||||
# Get sonarrId for each series from database
|
||||
seriesIdList = get_series_from_sonarr_api(series_id=series_id, url=url_sonarr(), apikey_sonarr=apikey_sonarr,
|
||||
sonarr_version=sonarr_version)
|
||||
seriesIdList = get_series_from_sonarr_api(series_id=series_id, url=url_sonarr(), apikey_sonarr=apikey_sonarr,)
|
||||
|
||||
series_count = len(seriesIdList)
|
||||
for i, seriesId in enumerate(seriesIdList, 1):
|
||||
|
@ -57,13 +55,12 @@ def sync_episodes(series_id=None, send_event=True):
|
|||
|
||||
# Get episodes data for a series from Sonarr
|
||||
episodes = get_episodes_from_sonarr_api(url=url_sonarr(), apikey_sonarr=apikey_sonarr,
|
||||
series_id=seriesId['sonarrSeriesId'],
|
||||
sonarr_version=sonarr_version)
|
||||
series_id=seriesId['sonarrSeriesId'])
|
||||
if not episodes:
|
||||
continue
|
||||
else:
|
||||
# For Sonarr v3, we need to update episodes to integrate the episodeFile API endpoint results
|
||||
if not sonarr_version.startswith(('0.', '2.')):
|
||||
if not get_sonarr_info.is_legacy():
|
||||
episodeFiles = get_episodesFiles_from_sonarr_api(url=url_sonarr(), apikey_sonarr=apikey_sonarr,
|
||||
series_id=seriesId['sonarrSeriesId'])
|
||||
for episode in episodes:
|
||||
|
@ -166,7 +163,6 @@ def sync_one_episode(episode_id):
|
|||
logging.debug('BAZARR syncing this specific episode from Sonarr: {}'.format(episode_id))
|
||||
url = url_sonarr()
|
||||
apikey_sonarr = settings.sonarr.apikey
|
||||
sonarr_version = get_sonarr_version()
|
||||
|
||||
# Check if there's a row in database for this episode ID
|
||||
try:
|
||||
|
@ -181,13 +177,13 @@ def sync_one_episode(episode_id):
|
|||
# Get episode data from sonarr api
|
||||
episode = None
|
||||
episode_data = get_episodes_from_sonarr_api(url=url, apikey_sonarr=apikey_sonarr,
|
||||
episode_id=episode_id, sonarr_version=sonarr_version)
|
||||
episode_id=episode_id)
|
||||
if not episode_data:
|
||||
return
|
||||
|
||||
else:
|
||||
# For Sonarr v3, we need to update episodes to integrate the episodeFile API endpoint results
|
||||
if not sonarr_version.startswith(('0.', '2.')):
|
||||
if not get_sonarr_info.is_legacy():
|
||||
episodeFile = get_episodesFiles_from_sonarr_api(url=url, apikey_sonarr=apikey_sonarr,
|
||||
episode_file_id=existing_episode['episode_file_id'])
|
||||
if episode_data['hasFile']:
|
||||
|
@ -336,13 +332,13 @@ def episodeParser(episode):
|
|||
'file_size': episode['episodeFile']['size']}
|
||||
|
||||
|
||||
def get_series_from_sonarr_api(series_id, url, apikey_sonarr, sonarr_version):
|
||||
def get_series_from_sonarr_api(series_id, url, apikey_sonarr):
|
||||
if series_id:
|
||||
url_sonarr_api_series = url + "/api/{0}series/{1}?apikey={2}".format(
|
||||
'' if sonarr_version.startswith(('0.', '2.')) else 'v3/', series_id, apikey_sonarr)
|
||||
'' if get_sonarr_info.is_legacy() else 'v3/', series_id, apikey_sonarr)
|
||||
else:
|
||||
url_sonarr_api_series = url + "/api/{0}series?apikey={1}".format(
|
||||
'' if sonarr_version.startswith(('0.', '2.')) else 'v3/', apikey_sonarr)
|
||||
'' if get_sonarr_info.is_legacy() else 'v3/', apikey_sonarr)
|
||||
try:
|
||||
r = requests.get(url_sonarr_api_series, timeout=60, verify=False, headers=headers)
|
||||
r.raise_for_status()
|
||||
|
@ -372,13 +368,13 @@ def get_series_from_sonarr_api(series_id, url, apikey_sonarr, sonarr_version):
|
|||
return series_list
|
||||
|
||||
|
||||
def get_episodes_from_sonarr_api(url, apikey_sonarr, sonarr_version, series_id=None, episode_id=None):
|
||||
def get_episodes_from_sonarr_api(url, apikey_sonarr, series_id=None, episode_id=None):
|
||||
if series_id:
|
||||
url_sonarr_api_episode = url + "/api/{0}episode?seriesId={1}&apikey={2}".format(
|
||||
'' if sonarr_version.startswith(('0.', '2.')) else 'v3/', series_id, apikey_sonarr)
|
||||
'' if get_sonarr_info.is_legacy() else 'v3/', series_id, apikey_sonarr)
|
||||
elif episode_id:
|
||||
url_sonarr_api_episode = url + "/api/{0}episode/{1}?apikey={2}".format(
|
||||
'' if sonarr_version.startswith(('0.', '2.')) else 'v3/', episode_id, apikey_sonarr)
|
||||
'' if get_sonarr_info.is_legacy() else 'v3/', episode_id, apikey_sonarr)
|
||||
else:
|
||||
return
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ from peewee import DoesNotExist
|
|||
|
||||
from config import settings, url_radarr
|
||||
from helper import path_mappings
|
||||
from utils import get_radarr_version
|
||||
from utils import get_radarr_info
|
||||
from list_subtitles import store_subtitles_movie, movies_full_scan_subtitles
|
||||
from get_rootfolder import check_radarr_rootfolder
|
||||
|
||||
|
@ -31,7 +31,6 @@ def update_movies(send_event=True):
|
|||
logging.debug('BAZARR Starting movie sync from Radarr.')
|
||||
apikey_radarr = settings.radarr.apikey
|
||||
|
||||
radarr_version = get_radarr_version()
|
||||
movie_default_enabled = settings.general.getboolean('movie_default_enabled')
|
||||
|
||||
if movie_default_enabled is True:
|
||||
|
@ -45,11 +44,10 @@ def update_movies(send_event=True):
|
|||
pass
|
||||
else:
|
||||
audio_profiles = get_profile_list()
|
||||
tagsDict = get_tags(radarr_version=radarr_version)
|
||||
tagsDict = get_tags()
|
||||
|
||||
# Get movies data from radarr
|
||||
movies = get_movies_from_radarr_api(radarr_version=radarr_version, url=url_radarr(),
|
||||
apikey_radarr=apikey_radarr)
|
||||
movies = get_movies_from_radarr_api(url=url_radarr(), apikey_radarr=apikey_radarr)
|
||||
if not movies:
|
||||
return
|
||||
else:
|
||||
|
@ -82,13 +80,11 @@ def update_movies(send_event=True):
|
|||
|
||||
if str(movie['tmdbId']) in current_movies_db_list:
|
||||
movies_to_update.append(movieParser(movie, action='update',
|
||||
radarr_version=radarr_version,
|
||||
tags_dict=tagsDict,
|
||||
movie_default_profile=movie_default_profile,
|
||||
audio_profiles=audio_profiles))
|
||||
else:
|
||||
movies_to_add.append(movieParser(movie, action='insert',
|
||||
radarr_version=radarr_version,
|
||||
tags_dict=tagsDict,
|
||||
movie_default_profile=movie_default_profile,
|
||||
audio_profiles=audio_profiles))
|
||||
|
@ -190,7 +186,6 @@ def update_one_movie(movie_id, action):
|
|||
existing_movie['path'])))
|
||||
return
|
||||
|
||||
radarr_version = get_radarr_version()
|
||||
movie_default_enabled = settings.general.getboolean('movie_default_enabled')
|
||||
|
||||
if movie_default_enabled is True:
|
||||
|
@ -201,24 +196,22 @@ def update_one_movie(movie_id, action):
|
|||
movie_default_profile = None
|
||||
|
||||
audio_profiles = get_profile_list()
|
||||
tagsDict = get_tags(radarr_version=radarr_version)
|
||||
tagsDict = get_tags()
|
||||
|
||||
try:
|
||||
# Get movie data from radarr api
|
||||
movie = None
|
||||
movie_data = get_movies_from_radarr_api(radarr_version=radarr_version, url=url_radarr(),
|
||||
apikey_radarr=settings.radarr.apikey, radarr_id=movie_id)
|
||||
movie_data = get_movies_from_radarr_api(url=url_radarr(), apikey_radarr=settings.radarr.apikey,
|
||||
radarr_id=movie_id)
|
||||
if not movie_data:
|
||||
return
|
||||
else:
|
||||
if action == 'updated' and existing_movie:
|
||||
movie = movieParser(movie_data, action='update', radarr_version=radarr_version,
|
||||
tags_dict=tagsDict, movie_default_profile=movie_default_profile,
|
||||
audio_profiles=audio_profiles)
|
||||
movie = movieParser(movie_data, action='update', tags_dict=tagsDict,
|
||||
movie_default_profile=movie_default_profile, audio_profiles=audio_profiles)
|
||||
elif action == 'updated' and not existing_movie:
|
||||
movie = movieParser(movie_data, action='insert', radarr_version=radarr_version,
|
||||
tags_dict=tagsDict, movie_default_profile=movie_default_profile,
|
||||
audio_profiles=audio_profiles)
|
||||
movie = movieParser(movie_data, action='insert', tags_dict=tagsDict,
|
||||
movie_default_profile=movie_default_profile, audio_profiles=audio_profiles)
|
||||
except Exception:
|
||||
logging.debug('BAZARR cannot get movie returned by SignalR feed from Radarr API.')
|
||||
return
|
||||
|
@ -262,10 +255,9 @@ def update_one_movie(movie_id, action):
|
|||
|
||||
def get_profile_list():
|
||||
apikey_radarr = settings.radarr.apikey
|
||||
radarr_version = get_radarr_version()
|
||||
profiles_list = []
|
||||
# Get profiles data from radarr
|
||||
if radarr_version.startswith('0'):
|
||||
if get_radarr_info.is_legacy():
|
||||
url_radarr_api_movies = url_radarr() + "/api/profile?apikey=" + apikey_radarr
|
||||
else:
|
||||
url_radarr_api_movies = url_radarr() + "/api/v3/qualityprofile?apikey=" + apikey_radarr
|
||||
|
@ -280,7 +272,7 @@ def get_profile_list():
|
|||
logging.exception("BAZARR Error trying to get profiles from Radarr.")
|
||||
else:
|
||||
# Parsing data returned from radarr
|
||||
if radarr_version.startswith('0'):
|
||||
if get_radarr_info.is_legacy():
|
||||
for profile in profiles_json.json():
|
||||
profiles_list.append([profile['id'], profile['language'].capitalize()])
|
||||
else:
|
||||
|
@ -346,12 +338,12 @@ def RadarrFormatVideoCodec(videoFormat, videoCodecID, videoCodecLibrary):
|
|||
return videoFormat
|
||||
|
||||
|
||||
def get_tags(radarr_version):
|
||||
def get_tags():
|
||||
apikey_radarr = settings.radarr.apikey
|
||||
tagsDict = []
|
||||
|
||||
# Get tags data from Radarr
|
||||
if radarr_version.startswith('0'):
|
||||
if get_radarr_info.is_legacy():
|
||||
url_radarr_api_series = url_radarr() + "/api/tag?apikey=" + apikey_radarr
|
||||
else:
|
||||
url_radarr_api_series = url_radarr() + "/api/v3/tag?apikey=" + apikey_radarr
|
||||
|
@ -371,7 +363,7 @@ def get_tags(radarr_version):
|
|||
return tagsDict.json()
|
||||
|
||||
|
||||
def movieParser(movie, action, radarr_version, tags_dict, movie_default_profile, audio_profiles):
|
||||
def movieParser(movie, action, tags_dict, movie_default_profile, audio_profiles):
|
||||
if 'movieFile' in movie:
|
||||
# Detect file separator
|
||||
if movie['path'][0] == "/":
|
||||
|
@ -399,7 +391,7 @@ def movieParser(movie, action, radarr_version, tags_dict, movie_default_profile,
|
|||
sceneName = None
|
||||
|
||||
alternativeTitles = None
|
||||
if radarr_version.startswith('0'):
|
||||
if get_radarr_info.is_legacy():
|
||||
if 'alternativeTitles' in movie:
|
||||
alternativeTitles = str([item['title'] for item in movie['alternativeTitles']])
|
||||
else:
|
||||
|
@ -422,7 +414,7 @@ def movieParser(movie, action, radarr_version, tags_dict, movie_default_profile,
|
|||
|
||||
if 'mediaInfo' in movie['movieFile']:
|
||||
videoFormat = videoCodecID = videoProfile = videoCodecLibrary = None
|
||||
if radarr_version.startswith('0'):
|
||||
if get_radarr_info.is_legacy():
|
||||
if 'videoFormat' in movie['movieFile']['mediaInfo']: videoFormat = \
|
||||
movie['movieFile']['mediaInfo']['videoFormat']
|
||||
else:
|
||||
|
@ -437,7 +429,7 @@ def movieParser(movie, action, radarr_version, tags_dict, movie_default_profile,
|
|||
videoCodec = RadarrFormatVideoCodec(videoFormat, videoCodecID, videoCodecLibrary)
|
||||
|
||||
audioFormat = audioCodecID = audioProfile = audioAdditionalFeatures = None
|
||||
if radarr_version.startswith('0'):
|
||||
if get_radarr_info.is_legacy():
|
||||
if 'audioFormat' in movie['movieFile']['mediaInfo']: audioFormat = \
|
||||
movie['movieFile']['mediaInfo']['audioFormat']
|
||||
else:
|
||||
|
@ -456,7 +448,7 @@ def movieParser(movie, action, radarr_version, tags_dict, movie_default_profile,
|
|||
audioCodec = None
|
||||
|
||||
audio_language = []
|
||||
if radarr_version.startswith('0'):
|
||||
if get_radarr_info.is_legacy():
|
||||
if 'mediaInfo' in movie['movieFile']:
|
||||
if 'audioLanguages' in movie['movieFile']['mediaInfo']:
|
||||
audio_languages_list = movie['movieFile']['mediaInfo']['audioLanguages'].split('/')
|
||||
|
@ -522,8 +514,8 @@ def movieParser(movie, action, radarr_version, tags_dict, movie_default_profile,
|
|||
'file_size': movie['movieFile']['size']}
|
||||
|
||||
|
||||
def get_movies_from_radarr_api(radarr_version, url, apikey_radarr, radarr_id=None):
|
||||
if radarr_version.startswith('0'):
|
||||
def get_movies_from_radarr_api(url, apikey_radarr, radarr_id=None):
|
||||
if get_radarr_info.is_legacy():
|
||||
url_radarr_api_movies = url + "/api/movie" + ("/{}".format(radarr_id) if radarr_id else "") + "?apikey=" + \
|
||||
apikey_radarr
|
||||
else:
|
||||
|
|
|
@ -7,7 +7,7 @@ import logging
|
|||
from config import settings, url_sonarr, url_radarr
|
||||
from helper import path_mappings
|
||||
from database import TableShowsRootfolder, TableMoviesRootfolder, TableShows, TableMovies
|
||||
from utils import get_sonarr_version, get_radarr_version
|
||||
from utils import get_sonarr_info, get_radarr_info
|
||||
|
||||
headers = {"User-Agent": os.environ["SZ_USER_AGENT"]}
|
||||
|
||||
|
@ -15,10 +15,9 @@ headers = {"User-Agent": os.environ["SZ_USER_AGENT"]}
|
|||
def get_sonarr_rootfolder():
|
||||
apikey_sonarr = settings.sonarr.apikey
|
||||
sonarr_rootfolder = []
|
||||
sonarr_version = get_sonarr_version()
|
||||
|
||||
# Get root folder data from Sonarr
|
||||
if sonarr_version.startswith(('0.', '2.')):
|
||||
if get_sonarr_info.is_legacy():
|
||||
url_sonarr_api_rootfolder = url_sonarr() + "/api/rootfolder?apikey=" + apikey_sonarr
|
||||
else:
|
||||
url_sonarr_api_rootfolder = url_sonarr() + "/api/v3/rootfolder?apikey=" + apikey_sonarr
|
||||
|
@ -90,10 +89,9 @@ def check_sonarr_rootfolder():
|
|||
def get_radarr_rootfolder():
|
||||
apikey_radarr = settings.radarr.apikey
|
||||
radarr_rootfolder = []
|
||||
radarr_version = get_radarr_version()
|
||||
|
||||
# Get root folder data from Radarr
|
||||
if radarr_version.startswith('0'):
|
||||
if get_radarr_info.is_legacy():
|
||||
url_radarr_api_rootfolder = url_radarr() + "/api/rootfolder?apikey=" + apikey_radarr
|
||||
else:
|
||||
url_radarr_api_rootfolder = url_radarr() + "/api/v3/rootfolder?apikey=" + apikey_radarr
|
||||
|
|
|
@ -11,7 +11,7 @@ from list_subtitles import list_missing_subtitles
|
|||
from get_rootfolder import check_sonarr_rootfolder
|
||||
from database import TableShows, TableEpisodes
|
||||
from get_episodes import sync_episodes
|
||||
from utils import get_sonarr_version
|
||||
from utils import get_sonarr_info
|
||||
from helper import path_mappings
|
||||
from event_handler import event_stream, show_progress, hide_progress
|
||||
|
||||
|
@ -24,7 +24,6 @@ def update_series(send_event=True):
|
|||
if apikey_sonarr is None:
|
||||
return
|
||||
|
||||
sonarr_version = get_sonarr_version()
|
||||
serie_default_enabled = settings.general.getboolean('serie_default_enabled')
|
||||
|
||||
if serie_default_enabled is True:
|
||||
|
@ -38,8 +37,7 @@ def update_series(send_event=True):
|
|||
tagsDict = get_tags()
|
||||
|
||||
# Get shows data from Sonarr
|
||||
series = get_series_from_sonarr_api(url=url_sonarr(), apikey_sonarr=apikey_sonarr,
|
||||
sonarr_version=sonarr_version)
|
||||
series = get_series_from_sonarr_api(url=url_sonarr(), apikey_sonarr=apikey_sonarr)
|
||||
if not series:
|
||||
return
|
||||
else:
|
||||
|
@ -65,12 +63,12 @@ def update_series(send_event=True):
|
|||
current_shows_sonarr.append(show['id'])
|
||||
|
||||
if show['id'] in current_shows_db_list:
|
||||
series_to_update.append(seriesParser(show, action='update', sonarr_version=sonarr_version,
|
||||
tags_dict=tagsDict, serie_default_profile=serie_default_profile,
|
||||
series_to_update.append(seriesParser(show, action='update', tags_dict=tagsDict,
|
||||
serie_default_profile=serie_default_profile,
|
||||
audio_profiles=audio_profiles))
|
||||
else:
|
||||
series_to_add.append(seriesParser(show, action='insert', sonarr_version=sonarr_version,
|
||||
tags_dict=tagsDict, serie_default_profile=serie_default_profile,
|
||||
series_to_add.append(seriesParser(show, action='insert', tags_dict=tagsDict,
|
||||
serie_default_profile=serie_default_profile,
|
||||
audio_profiles=audio_profiles))
|
||||
|
||||
if send_event:
|
||||
|
@ -155,7 +153,6 @@ def update_one_series(series_id, action):
|
|||
event_stream(type='series', action='delete', payload=int(series_id))
|
||||
return
|
||||
|
||||
sonarr_version = get_sonarr_version()
|
||||
serie_default_enabled = settings.general.getboolean('serie_default_enabled')
|
||||
|
||||
if serie_default_enabled is True:
|
||||
|
@ -173,18 +170,19 @@ def update_one_series(series_id, action):
|
|||
series = None
|
||||
|
||||
series_data = get_series_from_sonarr_api(url=url_sonarr(), apikey_sonarr=settings.sonarr.apikey,
|
||||
sonarr_series_id=int(series_id), sonarr_version=get_sonarr_version())
|
||||
sonarr_series_id=int(series_id),
|
||||
sonarr_version=get_sonarr_info.version())
|
||||
|
||||
if not series_data:
|
||||
return
|
||||
else:
|
||||
if action == 'updated' and existing_series:
|
||||
series = seriesParser(series_data, action='update', sonarr_version=sonarr_version,
|
||||
tags_dict=tagsDict, serie_default_profile=serie_default_profile,
|
||||
series = seriesParser(series_data, action='update', tags_dict=tagsDict,
|
||||
serie_default_profile=serie_default_profile,
|
||||
audio_profiles=audio_profiles)
|
||||
elif action == 'updated' and not existing_series:
|
||||
series = seriesParser(series_data, action='insert', sonarr_version=sonarr_version,
|
||||
tags_dict=tagsDict, serie_default_profile=serie_default_profile,
|
||||
series = seriesParser(series_data, action='insert', tags_dict=tagsDict,
|
||||
serie_default_profile=serie_default_profile,
|
||||
audio_profiles=audio_profiles)
|
||||
except Exception:
|
||||
logging.debug('BAZARR cannot parse series returned by SignalR feed.')
|
||||
|
@ -208,11 +206,10 @@ def update_one_series(series_id, action):
|
|||
|
||||
def get_profile_list():
|
||||
apikey_sonarr = settings.sonarr.apikey
|
||||
sonarr_version = get_sonarr_version()
|
||||
profiles_list = []
|
||||
|
||||
# Get profiles data from Sonarr
|
||||
if sonarr_version.startswith(('0.', '2.')):
|
||||
if get_sonarr_info.is_legacy():
|
||||
url_sonarr_api_series = url_sonarr() + "/api/profile?apikey=" + apikey_sonarr
|
||||
else:
|
||||
url_sonarr_api_series = url_sonarr() + "/api/v3/languageprofile?apikey=" + apikey_sonarr
|
||||
|
@ -230,7 +227,7 @@ def get_profile_list():
|
|||
return None
|
||||
|
||||
# Parsing data returned from Sonarr
|
||||
if sonarr_version.startswith(('0.', '2.')):
|
||||
if get_sonarr_info.is_legacy():
|
||||
for profile in profiles_json.json():
|
||||
profiles_list.append([profile['id'], profile['language'].capitalize()])
|
||||
else:
|
||||
|
@ -250,11 +247,10 @@ def profile_id_to_language(id_, profiles):
|
|||
|
||||
def get_tags():
|
||||
apikey_sonarr = settings.sonarr.apikey
|
||||
sonarr_version = get_sonarr_version()
|
||||
tagsDict = []
|
||||
|
||||
# Get tags data from Sonarr
|
||||
if sonarr_version.startswith(('0.', '2.')):
|
||||
if get_sonarr_info.is_legacy():
|
||||
url_sonarr_api_series = url_sonarr() + "/api/tag?apikey=" + apikey_sonarr
|
||||
else:
|
||||
url_sonarr_api_series = url_sonarr() + "/api/v3/tag?apikey=" + apikey_sonarr
|
||||
|
@ -274,7 +270,7 @@ def get_tags():
|
|||
return tagsDict.json()
|
||||
|
||||
|
||||
def seriesParser(show, action, sonarr_version, tags_dict, serie_default_profile, audio_profiles):
|
||||
def seriesParser(show, action, tags_dict, serie_default_profile, audio_profiles):
|
||||
overview = show['overview'] if 'overview' in show else ''
|
||||
poster = ''
|
||||
fanart = ''
|
||||
|
@ -291,7 +287,7 @@ def seriesParser(show, action, sonarr_version, tags_dict, serie_default_profile,
|
|||
alternate_titles = str([item['title'] for item in show['alternateTitles']])
|
||||
|
||||
audio_language = []
|
||||
if sonarr_version.startswith(('0.', '2.')):
|
||||
if get_sonarr_info.is_legacy():
|
||||
audio_language = profile_id_to_language(show['qualityProfileId'], audio_profiles)
|
||||
else:
|
||||
audio_language = profile_id_to_language(show['languageProfileId'], audio_profiles)
|
||||
|
@ -333,9 +329,9 @@ def seriesParser(show, action, sonarr_version, tags_dict, serie_default_profile,
|
|||
'profileId': serie_default_profile}
|
||||
|
||||
|
||||
def get_series_from_sonarr_api(url, apikey_sonarr, sonarr_version, sonarr_series_id=None):
|
||||
def get_series_from_sonarr_api(url, apikey_sonarr, sonarr_series_id=None):
|
||||
url_sonarr_api_series = url + "/api/{0}series/{1}?apikey={2}".format(
|
||||
'' if sonarr_version.startswith(('0.', '2.')) else 'v3/', sonarr_series_id if sonarr_series_id else "", apikey_sonarr)
|
||||
'' if get_sonarr_info.is_legacy() else 'v3/', sonarr_series_id if sonarr_series_id else "", apikey_sonarr)
|
||||
try:
|
||||
r = requests.get(url_sonarr_api_series, timeout=60, verify=False, headers=headers)
|
||||
r.raise_for_status()
|
||||
|
|
|
@ -43,7 +43,7 @@ from signalr_client import sonarr_signalr_client, radarr_signalr_client
|
|||
from check_update import apply_update, check_if_new_update, check_releases
|
||||
from server import app, webserver
|
||||
from functools import wraps
|
||||
from utils import check_credentials, get_sonarr_version, get_radarr_version
|
||||
from utils import check_credentials, get_sonarr_info, get_radarr_info
|
||||
|
||||
# Install downloaded update
|
||||
if bazarr_version != '':
|
||||
|
@ -131,8 +131,7 @@ def series_images(url):
|
|||
url = url.strip("/")
|
||||
apikey = settings.sonarr.apikey
|
||||
baseUrl = settings.sonarr.base_url
|
||||
sonarr_version = get_sonarr_version()
|
||||
if sonarr_version.startswith(('0.', '2.')):
|
||||
if get_sonarr_info.is_legacy():
|
||||
url_image = (url_sonarr() + '/api/' + url.lstrip(baseUrl) + '?apikey=' +
|
||||
apikey).replace('poster-250', 'poster-500')
|
||||
else:
|
||||
|
@ -151,8 +150,7 @@ def series_images(url):
|
|||
def movies_images(url):
|
||||
apikey = settings.radarr.apikey
|
||||
baseUrl = settings.radarr.base_url
|
||||
radarr_version = get_radarr_version()
|
||||
if radarr_version.startswith('0'):
|
||||
if get_radarr_info.is_legacy():
|
||||
url_image = url_radarr() + '/api/' + url.lstrip(baseUrl) + '?apikey=' + apikey
|
||||
else:
|
||||
url_image = url_radarr() + '/api/v3/' + url.lstrip(baseUrl) + '?apikey=' + apikey
|
||||
|
|
|
@ -15,7 +15,7 @@ from get_episodes import sync_episodes, sync_one_episode
|
|||
from get_series import update_series, update_one_series
|
||||
from get_movies import update_movies, update_one_movie
|
||||
from scheduler import scheduler
|
||||
from utils import get_sonarr_version
|
||||
from utils import get_sonarr_info
|
||||
from get_args import args
|
||||
|
||||
|
||||
|
@ -33,10 +33,9 @@ class SonarrSignalrClient:
|
|||
self.connection = None
|
||||
|
||||
def start(self):
|
||||
sonarr_version = get_sonarr_version()
|
||||
if sonarr_version.startswith(('0.', '2.')):
|
||||
if get_sonarr_info.is_legacy():
|
||||
logging.warning('BAZARR can only sync from Sonarr v3 SignalR feed to get real-time update. You should '
|
||||
'consider upgrading your version({}).'.format(sonarr_version))
|
||||
'consider upgrading your version({}).'.format(get_sonarr_info.version()))
|
||||
raise gevent.GreenletExit
|
||||
else:
|
||||
logging.info('BAZARR trying to connect to Sonarr SignalR feed...')
|
||||
|
|
153
bazarr/utils.py
153
bazarr/utils.py
|
@ -236,46 +236,52 @@ def cache_maintenance():
|
|||
remove_expired(fn, pack_cache_validity)
|
||||
|
||||
|
||||
def get_sonarr_version():
|
||||
sonarr_version = ''
|
||||
if settings.general.getboolean('use_sonarr'):
|
||||
try:
|
||||
sv = url_sonarr() + "/api/system/status?apikey=" + settings.sonarr.apikey
|
||||
sonarr_json = requests.get(sv, timeout=60, verify=False, headers=headers).json()
|
||||
if 'version' in sonarr_json:
|
||||
sonarr_version = sonarr_json['version']
|
||||
else:
|
||||
sv = url_sonarr() + "/api/v3/system/status?apikey=" + settings.sonarr.apikey
|
||||
sonarr_version = requests.get(sv, timeout=60, verify=False, headers=headers).json()['version']
|
||||
except Exception:
|
||||
logging.debug('BAZARR cannot get Sonarr version')
|
||||
sonarr_version = 'unknown'
|
||||
return sonarr_version
|
||||
|
||||
|
||||
def get_sonarr_platform():
|
||||
sonarr_platform = ''
|
||||
sonarr_version = get_sonarr_version()
|
||||
if settings.general.getboolean('use_sonarr'):
|
||||
try:
|
||||
if sonarr_version.startswith(('0.', '2.')):
|
||||
class GetSonarrInfo:
|
||||
@staticmethod
|
||||
def version():
|
||||
"""
|
||||
Call system/status API endpoint and get the Sonarr version
|
||||
@return: str
|
||||
"""
|
||||
sonarr_version = region.get("sonarr_version", expiration_time=datetime.timedelta(seconds=60).total_seconds())
|
||||
if sonarr_version:
|
||||
region.set("sonarr_version", sonarr_version)
|
||||
return sonarr_version
|
||||
else:
|
||||
sonarr_version = ''
|
||||
if settings.general.getboolean('use_sonarr'):
|
||||
try:
|
||||
sv = url_sonarr() + "/api/system/status?apikey=" + settings.sonarr.apikey
|
||||
else:
|
||||
sv = url_sonarr() + "/api/v3/system/status?apikey=" + settings.sonarr.apikey
|
||||
response = requests.get(sv, timeout=60, verify=False, headers=headers).json()
|
||||
if response['isLinux'] or response['isOsx']:
|
||||
sonarr_platform = 'posix'
|
||||
elif response['isWindows']:
|
||||
sonarr_platform = 'nt'
|
||||
except Exception:
|
||||
logging.debug('BAZARR cannot get Sonarr platform')
|
||||
return sonarr_platform
|
||||
sonarr_json = requests.get(sv, timeout=60, verify=False, headers=headers).json()
|
||||
if 'version' in sonarr_json:
|
||||
sonarr_version = sonarr_json['version']
|
||||
else:
|
||||
sv = url_sonarr() + "/api/v3/system/status?apikey=" + settings.sonarr.apikey
|
||||
sonarr_version = requests.get(sv, timeout=60, verify=False, headers=headers).json()['version']
|
||||
except Exception:
|
||||
logging.debug('BAZARR cannot get Sonarr version')
|
||||
sonarr_version = 'unknown'
|
||||
region.set("sonarr_version", sonarr_version)
|
||||
return sonarr_version
|
||||
|
||||
def is_legacy(self):
|
||||
"""
|
||||
Call self.version() and parse the result to determine if it's a legacy version of Sonarr API
|
||||
@return: bool
|
||||
"""
|
||||
sonarr_version = self.version()
|
||||
if sonarr_version.startswith(('0.', '2.')):
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
|
||||
get_sonarr_info = GetSonarrInfo()
|
||||
|
||||
|
||||
def notify_sonarr(sonarr_series_id):
|
||||
sonarr_version = get_sonarr_version()
|
||||
try:
|
||||
if sonarr_version.startswith(('0.', '2.')):
|
||||
if get_sonarr_info.is_legacy():
|
||||
url = url_sonarr() + "/api/command?apikey=" + settings.sonarr.apikey
|
||||
else:
|
||||
url = url_sonarr() + "/api/v3/command?apikey=" + settings.sonarr.apikey
|
||||
|
@ -285,47 +291,54 @@ def notify_sonarr(sonarr_series_id):
|
|||
}
|
||||
requests.post(url, json=data, timeout=60, verify=False, headers=headers)
|
||||
except Exception as e:
|
||||
logging.debug('BAZARR notify Sonarr')
|
||||
logging.exception('BAZARR cannot notify Sonarr')
|
||||
|
||||
|
||||
def get_radarr_version():
|
||||
radarr_version = ''
|
||||
if settings.general.getboolean('use_radarr'):
|
||||
try:
|
||||
rv = url_radarr() + "/api/system/status?apikey=" + settings.radarr.apikey
|
||||
radarr_json = requests.get(rv, timeout=60, verify=False, headers=headers).json()
|
||||
if 'version' in radarr_json:
|
||||
radarr_version = radarr_json['version']
|
||||
else:
|
||||
rv = url_radarr() + "/api/v3/system/status?apikey=" + settings.radarr.apikey
|
||||
radarr_version = requests.get(rv, timeout=60, verify=False, headers=headers).json()['version']
|
||||
except Exception as e:
|
||||
logging.debug('BAZARR cannot get Radarr version')
|
||||
radarr_version = 'unknown'
|
||||
return radarr_version
|
||||
|
||||
|
||||
def get_radarr_platform():
|
||||
radarr_platform = ''
|
||||
if settings.general.getboolean('use_radarr'):
|
||||
try:
|
||||
if get_radarr_version().startswith('0'):
|
||||
class GetRadarrInfo:
|
||||
@staticmethod
|
||||
def version():
|
||||
"""
|
||||
Call system/status API endpoint and get the Radarr version
|
||||
@return: str
|
||||
"""
|
||||
radarr_version = region.get("radarr_version", expiration_time=datetime.timedelta(seconds=60).total_seconds())
|
||||
if radarr_version:
|
||||
return radarr_version
|
||||
else:
|
||||
radarr_version = ''
|
||||
if settings.general.getboolean('use_radarr'):
|
||||
try:
|
||||
rv = url_radarr() + "/api/system/status?apikey=" + settings.radarr.apikey
|
||||
else:
|
||||
rv = url_radarr() + "/api/v3/system/status?apikey=" + settings.radarr.apikey
|
||||
response = requests.get(rv, timeout=60, verify=False, headers=headers).json()
|
||||
if response['isLinux'] or response['isOsx']:
|
||||
radarr_platform = 'posix'
|
||||
elif response['isWindows']:
|
||||
radarr_platform = 'nt'
|
||||
except Exception:
|
||||
logging.debug('BAZARR cannot get Radarr platform')
|
||||
return radarr_platform
|
||||
radarr_json = requests.get(rv, timeout=60, verify=False, headers=headers).json()
|
||||
if 'version' in radarr_json:
|
||||
radarr_version = radarr_json['version']
|
||||
else:
|
||||
rv = url_radarr() + "/api/v3/system/status?apikey=" + settings.radarr.apikey
|
||||
radarr_version = requests.get(rv, timeout=60, verify=False, headers=headers).json()['version']
|
||||
except Exception as e:
|
||||
logging.debug('BAZARR cannot get Radarr version')
|
||||
radarr_version = 'unknown'
|
||||
region.set("radarr_version", radarr_version)
|
||||
return radarr_version
|
||||
|
||||
def is_legacy(self):
|
||||
"""
|
||||
Call self.version() and parse the result to determine if it's a legacy version of Radarr
|
||||
@return: bool
|
||||
"""
|
||||
radarr_version = self.version()
|
||||
if radarr_version.startswith('0.'):
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
|
||||
get_radarr_info = GetRadarrInfo()
|
||||
|
||||
|
||||
def notify_radarr(radarr_id):
|
||||
try:
|
||||
if get_radarr_version().startswith('0'):
|
||||
if get_radarr_info.is_legacy():
|
||||
url = url_radarr() + "/api/command?apikey=" + settings.radarr.apikey
|
||||
else:
|
||||
url = url_radarr() + "/api/v3/command?apikey=" + settings.radarr.apikey
|
||||
|
@ -335,7 +348,7 @@ def notify_radarr(radarr_id):
|
|||
}
|
||||
requests.post(url, json=data, timeout=60, verify=False, headers=headers)
|
||||
except Exception as e:
|
||||
logging.debug('BAZARR notify Radarr')
|
||||
logging.exception('BAZARR cannot notify Radarr')
|
||||
|
||||
|
||||
def delete_subtitles(media_type, language, forced, hi, media_path, subtitles_path, sonarr_series_id=None,
|
||||
|
|
Loading…
Reference in New Issue