fix language profile on sonarr v3

pull/21/head
Leonardo Merza 4 years ago
parent cdd76ddd19
commit e0bf9490a2

@ -9,8 +9,11 @@ import configparser
DEV = os.environ.get('DEV')
VER = '1.7.0'
VER = '1.7.1'
DEBUG_LINE = '-' * 20
V1_API_PATH = 'v1/'
V2_API_PATH = ''
V3_API_PATH = 'v3/'
########################################################################################################################
@ -213,7 +216,7 @@ instanceB_language_id = ''
instanceB_language = ''
api_version = 'v1/' # we are going to detect what API version we are on
api_version = '' # we are going to detect what API version we are on
tested_api_version = False # only get api version once
@ -246,7 +249,7 @@ if radarrA_url and radarrB_url:
instanceB_profile_filter_id = radarrB_profile_filter_id
instanceB_path = radarrB_path
api_version = '' # radarr v2 doesnt have version in api url
api_version = V2_API_PATH # radarr v2 doesnt have version in api url
api_content_path = 'movie'
api_search_path = 'command'
api_profile_path = 'profile'
@ -272,7 +275,7 @@ elif lidarrA_url and lidarrB_url:
instanceB_profile_filter_id = lidarrB_profile_filter_id
instanceB_path = lidarrB_path
api_version = 'v1/'
api_version = V1_API_PATH
api_content_path = 'artist'
api_search_path = 'command'
api_profile_path = 'qualityprofile'
@ -302,11 +305,10 @@ elif sonarrA_url and sonarrB_url:
instanceB_language = sonarrB_language
instanceB_language_id = sonarrB_language_id
api_version = ''
api_version = V3_API_PATH # for sonarr try v3 first
api_content_path = 'series'
api_search_path = 'command'
api_profile_path = 'profile'
api_profile_path = 'qualityprofile'
api_status_path = 'system/status'
api_language_path = 'languageprofile'
@ -316,23 +318,34 @@ elif sonarrA_url and sonarrB_url:
########################################################################################################################
# path generators
def get_path(instance_url, api_path, key, checkV3=False):
global api_version, api_profile_path
if not tested_api_version:
logger.debug(f'checkV3: "{checkV3}" for {instance_url}')
def get_path(instance_url, api_path, key, changed_api_version=False):
global api_version, api_profile_path
if checkV3:
if changed_api_version:
api_version = V3_API_PATH
if checkV3 and is_sonarr:
api_profile_path = 'qualityprofile'
# for sonarr - we check v3 first then v2
if is_sonarr and changed_api_version:
api_version = V2_API_PATH
api_profile_path = 'profile'
logger.debug(DEBUG_LINE)
logger.debug({
'instance_url': instance_url,
'api_path': api_path,
'api_version': api_version,
'is_sonarr': is_sonarr,
'api_profile_path': api_profile_path,
'changed_api_version': changed_api_version,
})
url = f"{instance_url}/api/{api_version}{api_path}?apikey={key}"
return url
def get_status_path(instance_url, key, checkV3):
url = get_path(instance_url, api_status_path, key, checkV3)
def get_status_path(instance_url, key, changed_api_version):
url = get_path(instance_url, api_status_path, key, changed_api_version)
logger.debug('get_status_path: {}'.format(url))
return url
@ -347,9 +360,6 @@ def get_search_path(instance_url, key):
return url
def get_language_path(instance_url, key):
print('-'*20)
print(instance_url)
print('-'*20)
url = get_path(instance_url, api_language_path, key)
logger.debug('get_language_path: {}'.format(url))
return url
@ -370,11 +380,13 @@ logger.debug({
'instanceB_key': instanceB_key,
'instanceB_path': instanceB_path,
'api_content_path': api_content_path,
'api_profile_path': api_profile_path,
'api_search_path': api_search_path,
'api_language_path': api_language_path,
'is_sonarr': is_sonarr,
'is_lidarr': is_lidarr,
'monitor_new_content': monitor_new_content,
'api_version': api_version,
})
if not instanceA_url:

@ -22,7 +22,7 @@ from config import (
is_in_docker, instance_sync_interval_seconds,
sync_bidirectionally, auto_search, monitor_new_content,
tested_api_version, api_version, V3_API_PATH,
tested_api_version, api_version, V3_API_PATH,
)
@ -98,8 +98,8 @@ def get_profile_from_id(instance_session, instance_url, instance_key, instance_p
sys.exit(0)
instance_profile_id = profile.get('id')
logger.debug('found profile_id "{}" from profile "{}" for instance {}'.format(
instance_profile_id, instance_profile, instance_name))
logger.debug(
f'found profile_id ({instance_name})" {instance_profile_id}" from profile "{instance_profile}"')
return instance_profile_id
@ -109,8 +109,8 @@ def get_language_from_id(instance_session, instance_url, instance_key, instance_
language_response = instance_session.get(instance_language_url)
if language_response.status_code != 200:
logger.error(
f'Could not get language id from {instance_language_url} - only works on sonarr v3')
return None
f'Could not get language id from ({instance_name}) {instance_language_url} - only works on sonarr v3')
sys.exit(0)
instance_languages = None
try:
@ -121,16 +121,20 @@ def get_language_from_id(instance_session, instance_url, instance_key, instance_
sys.exit(0)
instance_languages = instance_languages[0]['languages']
language = next((item for item in instance_languages if item["name"].lower() == instance_language.lower()), False)
language = next((item for item in instance_languages
if item.get('language', {}).get('name').lower() == instance_language.lower()), False)
logger.error(language)
if not language:
logger.error('Could not find language_id for instance {} language {}'.format(
instance_name, instance_language))
logger.error(f'Could not find language_id for instance {instance_name} and language {instance_language}')
sys.exit(0)
instance_language_id = language.get('id')
logger.debug('found language_id "{}" from language "{}" for instance {}'.format(
instance_language_id, instance_language, instance_name))
instance_language_id = language.get('language', {}).get('id')
logger.debug(f'found id "{instance_language_id}" from language "{instance_language}" for instance {instance_name}')
if instance_language_id is None:
logger.error(f'language_id is None for instance {instance_name} and language {instance_language}')
sys.exit(0)
return instance_language_id
@ -216,11 +220,11 @@ def get_instance_contents(instance_url, instance_key, instance_session, instance
return instance_contents, instance_contentIds
def check_status(instance_session, instance_url, instance_key, instance_name='', checkV3=False):
def check_status(instance_session, instance_url, instance_key, instance_name='', changed_api_version=False):
global api_version
logger.debug(f'check api_version "{api_version}"')
instance_status_url = get_status_path(instance_url, instance_key, checkV3)
instance_status_url = get_status_path(
instance_url, instance_key, changed_api_version)
error_message = f'Could not connect to instance{instance_name}: {instance_status_url}'
status_response = None
@ -228,16 +232,18 @@ def check_status(instance_session, instance_url, instance_key, instance_name='',
status_response = instance_session.get(instance_status_url)
# only test again if not lidarr and we haven't tested v3 already
if status_response.status_code != 200 and not checkV3 and not is_lidarr:
if status_response.status_code != 200 and not changed_api_version and not is_lidarr:
logger.debug(f'check api_version again')
status_response = check_status(instance_session, instance_url, instance_key, instance_name, checkV3=True)
status_response = check_status(instance_session, instance_url, instance_key, instance_name, True)
elif status_response.status_code != 200:
logger.error(error_message)
sys.exit(0)
except:
if not checkV3 and not is_lidarr:
if not changed_api_version and not is_lidarr:
logger.debug(f'check api_version again exception')
status_response = check_status(instance_session, instance_url, instance_key, instance_name, checkV3=True)
status_response = check_status(
instance_session, instance_url, instance_key, instance_name, True)
if status_response is None:
logger.error(error_message)
@ -245,16 +251,18 @@ def check_status(instance_session, instance_url, instance_key, instance_name='',
else:
try:
status_response = status_response.json()
except:
logger.error(f"Could not retrieve status for {instance_status_url}")
sys.exit(0)
except Exception as error:
if not isinstance(status_response, dict):
logger.error(
f"Could not retrieve status for {instance_status_url}: {status_response} - {error}")
sys.exit(0)
if(status_response.get('error')):
logger.error(f"{instance_status_url} error {status_response.get('error')}")
sys.exit(0)
logger.debug(f"{instance_status_url} version {status_response.get('version')}")
return status_response

Loading…
Cancel
Save