no log: centralized Sonarr/Radarr API url definition and improved usage

pull/2286/head v1.3.2-beta.7
morpheus65535 11 months ago
parent 54f9570a22
commit 0d882b3d6e

@ -9,8 +9,8 @@ from functools import wraps
from urllib.parse import unquote from urllib.parse import unquote
from constants import headers from constants import headers
from sonarr.info import get_sonarr_info, url_sonarr from sonarr.info import url_api_sonarr
from radarr.info import get_radarr_info, url_radarr from radarr.info import url_api_radarr
from utilities.helper import check_credentials from utilities.helper import check_credentials
from .config import settings, base_url from .config import settings, base_url
@ -109,10 +109,7 @@ def series_images(url):
url = url.strip("/") url = url.strip("/")
apikey = settings.sonarr.apikey apikey = settings.sonarr.apikey
baseUrl = settings.sonarr.base_url baseUrl = settings.sonarr.base_url
if get_sonarr_info.is_legacy(): url_image = f'{url_api_sonarr()}{url.lstrip(baseUrl)}?apikey={apikey}'.replace('poster-250', 'poster-500')
url_image = f'{url_sonarr()}/api/{url.lstrip(baseUrl)}?apikey={apikey}'.replace('poster-250', 'poster-500')
else:
url_image = f'{url_sonarr()}/api/v3/{url.lstrip(baseUrl)}?apikey={apikey}'.replace('poster-250', 'poster-500')
try: try:
req = requests.get(url_image, stream=True, timeout=15, verify=False, headers=headers) req = requests.get(url_image, stream=True, timeout=15, verify=False, headers=headers)
except Exception: except Exception:
@ -126,10 +123,7 @@ def series_images(url):
def movies_images(url): def movies_images(url):
apikey = settings.radarr.apikey apikey = settings.radarr.apikey
baseUrl = settings.radarr.base_url baseUrl = settings.radarr.base_url
if get_radarr_info.is_legacy(): url_image = f'{url_api_radarr()}{url.lstrip(baseUrl)}?apikey={apikey}'
url_image = f'{url_radarr()}/api/{url.lstrip(baseUrl)}?apikey={apikey}'
else:
url_image = f'{url_radarr()}/api/v3/{url.lstrip(baseUrl)}?apikey={apikey}'
try: try:
req = requests.get(url_image, stream=True, timeout=15, verify=False, headers=headers) req = requests.get(url_image, stream=True, timeout=15, verify=False, headers=headers)
except Exception: except Exception:

@ -4,7 +4,7 @@ import requests
import logging import logging
from app.config import settings from app.config import settings
from radarr.info import get_radarr_info, url_radarr from radarr.info import url_api_radarr
from constants import headers from constants import headers
@ -12,14 +12,8 @@ def browse_radarr_filesystem(path='#'):
if path == '#': if path == '#':
path = '' path = ''
if get_radarr_info.is_legacy(): url_radarr_api_filesystem = (f"{url_api_radarr()}filesystem?path={path}&allowFoldersWithoutTrailingSlashes=true&"
url_radarr_api_filesystem = (f"{url_radarr()}/api/filesystem?path={path}&" f"includeFiles=false&apikey={settings.radarr.apikey}")
f"allowFoldersWithoutTrailingSlashes=true&includeFiles=false&"
f"apikey={settings.radarr.apikey}")
else:
url_radarr_api_filesystem = (f"{url_radarr()}/api/v3/filesystem?path={path}&"
f"allowFoldersWithoutTrailingSlashes=true&includeFiles=false&"
f"apikey={settings.radarr.apikey}")
try: try:
r = requests.get(url_radarr_api_filesystem, timeout=int(settings.radarr.http_timeout), verify=False, r = requests.get(url_radarr_api_filesystem, timeout=int(settings.radarr.http_timeout), verify=False,
headers=headers) headers=headers)

@ -95,3 +95,7 @@ def url_radarr():
port = f":{settings.radarr.port}" port = f":{settings.radarr.port}"
return f"{protocol_radarr}://{settings.radarr.ip}{port}{settings.radarr.base_url}" return f"{protocol_radarr}://{settings.radarr.ip}{port}{settings.radarr.base_url}"
def url_api_radarr():
return url_radarr() + f'/api{"/v3" if not get_radarr_info.is_legacy() else ""}/'

@ -4,16 +4,13 @@ import logging
import requests import requests
from app.config import settings from app.config import settings
from radarr.info import get_radarr_info, url_radarr from radarr.info import url_api_radarr
from constants import headers from constants import headers
def notify_radarr(radarr_id): def notify_radarr(radarr_id):
try: try:
if get_radarr_info.is_legacy(): url = f"{url_api_radarr()}command?apikey={settings.radarr.apikey}"
url = f"{url_radarr()}/api/command?apikey={settings.radarr.apikey}"
else:
url = f"{url_radarr()}/api/v3/command?apikey={settings.radarr.apikey}"
data = { data = {
'name': 'RescanMovie', 'name': 'RescanMovie',
'movieId': int(radarr_id) 'movieId': int(radarr_id)

@ -7,7 +7,7 @@ import logging
from app.config import settings from app.config import settings
from utilities.path_mappings import path_mappings from utilities.path_mappings import path_mappings
from app.database import TableMoviesRootfolder, TableMovies, database, delete, update, insert, select from app.database import TableMoviesRootfolder, TableMovies, database, delete, update, insert, select
from radarr.info import get_radarr_info, url_radarr from radarr.info import url_api_radarr
from constants import headers from constants import headers
@ -16,10 +16,7 @@ def get_radarr_rootfolder():
radarr_rootfolder = [] radarr_rootfolder = []
# Get root folder data from Radarr # Get root folder data from Radarr
if get_radarr_info.is_legacy(): url_radarr_api_rootfolder = f"{url_api_radarr()}rootfolder?apikey={apikey_radarr}"
url_radarr_api_rootfolder = f"{url_radarr()}/api/rootfolder?apikey={apikey_radarr}"
else:
url_radarr_api_rootfolder = f"{url_radarr()}/api/v3/rootfolder?apikey={apikey_radarr}"
try: try:
rootfolder = requests.get(url_radarr_api_rootfolder, timeout=int(settings.radarr.http_timeout), verify=False, headers=headers) rootfolder = requests.get(url_radarr_api_rootfolder, timeout=int(settings.radarr.http_timeout), verify=False, headers=headers)

@ -6,7 +6,6 @@ import logging
from sqlalchemy.exc import IntegrityError from sqlalchemy.exc import IntegrityError
from app.config import settings from app.config import settings
from radarr.info import url_radarr
from utilities.path_mappings import path_mappings from utilities.path_mappings import path_mappings
from subtitles.indexer.movies import store_subtitles_movie, movies_full_scan_subtitles from subtitles.indexer.movies import store_subtitles_movie, movies_full_scan_subtitles
from radarr.rootfolder import check_radarr_rootfolder from radarr.rootfolder import check_radarr_rootfolder
@ -82,7 +81,7 @@ def update_movies(send_event=True):
tagsDict = get_tags() tagsDict = get_tags()
# Get movies data from radarr # Get movies data from radarr
movies = get_movies_from_radarr_api(url=url_radarr(), apikey_radarr=apikey_radarr) movies = get_movies_from_radarr_api(apikey_radarr=apikey_radarr)
if not isinstance(movies, list): if not isinstance(movies, list):
return return
else: else:
@ -100,7 +99,6 @@ def update_movies(send_event=True):
'movieFile' in movie and 'movieFile' in movie and
(movie['movieFile']['size'] > 20480 or (movie['movieFile']['size'] > 20480 or
get_movie_file_size_from_db(movie['movieFile']['path']) > 20480)] get_movie_file_size_from_db(movie['movieFile']['path']) > 20480)]
movies_to_add = []
# Remove old movies from DB # Remove old movies from DB
movies_to_delete = list(set(current_movies_id_db) - set(current_movies_radarr)) movies_to_delete = list(set(current_movies_id_db) - set(current_movies_radarr))
@ -191,8 +189,7 @@ def update_one_movie(movie_id, action, defer_search=False):
try: try:
# Get movie data from radarr api # Get movie data from radarr api
movie = None movie = None
movie_data = get_movies_from_radarr_api(url=url_radarr(), apikey_radarr=settings.radarr.apikey, movie_data = get_movies_from_radarr_api(apikey_radarr=settings.radarr.apikey, radarr_id=movie_id)
radarr_id=movie_id)
if not movie_data: if not movie_data:
return return
else: else:

@ -4,7 +4,7 @@ import requests
import logging import logging
from app.config import settings from app.config import settings
from radarr.info import get_radarr_info, url_radarr from radarr.info import get_radarr_info, url_api_radarr
from constants import headers from constants import headers
@ -12,10 +12,8 @@ def get_profile_list():
apikey_radarr = settings.radarr.apikey apikey_radarr = settings.radarr.apikey
profiles_list = [] profiles_list = []
# Get profiles data from radarr # Get profiles data from radarr
if get_radarr_info.is_legacy(): url_radarr_api_movies = (f"{url_api_radarr()}{'quality' if url_api_radarr().endswith('v3/') else ''}profile?"
url_radarr_api_movies = f"{url_radarr()}/api/profile?apikey={apikey_radarr}" f"apikey={apikey_radarr}")
else:
url_radarr_api_movies = f"{url_radarr()}/api/v3/qualityprofile?apikey={apikey_radarr}"
try: try:
profiles_json = requests.get(url_radarr_api_movies, timeout=int(settings.radarr.http_timeout), verify=False, headers=headers) profiles_json = requests.get(url_radarr_api_movies, timeout=int(settings.radarr.http_timeout), verify=False, headers=headers)
@ -44,10 +42,7 @@ def get_tags():
tagsDict = [] tagsDict = []
# Get tags data from Radarr # Get tags data from Radarr
if get_radarr_info.is_legacy(): url_radarr_api_series = f"{url_api_radarr()}tag?apikey={apikey_radarr}"
url_radarr_api_series = f"{url_radarr()}/api/tag?apikey={apikey_radarr}"
else:
url_radarr_api_series = f"{url_radarr()}/api/v3/tag?apikey={apikey_radarr}"
try: try:
tagsDict = requests.get(url_radarr_api_series, timeout=int(settings.radarr.http_timeout), verify=False, headers=headers) tagsDict = requests.get(url_radarr_api_series, timeout=int(settings.radarr.http_timeout), verify=False, headers=headers)
@ -70,11 +65,8 @@ def get_tags():
return [] return []
def get_movies_from_radarr_api(url, apikey_radarr, radarr_id=None): def get_movies_from_radarr_api(apikey_radarr, radarr_id=None):
if get_radarr_info.is_legacy(): url_radarr_api_movies = f'{url_api_radarr()}movie{f"/{radarr_id}" if radarr_id else ""}?apikey={apikey_radarr}'
url_radarr_api_movies = f'{url}/api/movie{f"/{radarr_id}" if radarr_id else ""}?apikey={apikey_radarr}'
else:
url_radarr_api_movies = f'{url}/api/v3/movie{f"/{radarr_id}" if radarr_id else ""}?apikey={apikey_radarr}'
try: try:
r = requests.get(url_radarr_api_movies, timeout=int(settings.radarr.http_timeout), verify=False, headers=headers) r = requests.get(url_radarr_api_movies, timeout=int(settings.radarr.http_timeout), verify=False, headers=headers)

@ -4,21 +4,15 @@ import requests
import logging import logging
from app.config import settings from app.config import settings
from sonarr.info import get_sonarr_info, url_sonarr from sonarr.info import url_api_sonarr
from constants import headers from constants import headers
def browse_sonarr_filesystem(path='#'): def browse_sonarr_filesystem(path='#'):
if path == '#': if path == '#':
path = '' path = ''
if get_sonarr_info.is_legacy(): url_sonarr_api_filesystem = (f"{url_api_sonarr()}filesystem?path={path}&allowFoldersWithoutTrailingSlashes=true&"
url_sonarr_api_filesystem = (f"{url_sonarr()}/api/filesystem?path={path}&" f"includeFiles=false&apikey={settings.sonarr.apikey}")
f"allowFoldersWithoutTrailingSlashes=true&includeFiles=false&"
f"apikey={settings.sonarr.apikey}")
else:
url_sonarr_api_filesystem = (f"{url_sonarr()}/api/v3/filesystem?path={path}&"
f"allowFoldersWithoutTrailingSlashes=true&includeFiles=false&"
f"apikey={settings.sonarr.apikey}")
try: try:
r = requests.get(url_sonarr_api_filesystem, timeout=int(settings.sonarr.http_timeout), verify=False, r = requests.get(url_sonarr_api_filesystem, timeout=int(settings.sonarr.http_timeout), verify=False,
headers=headers) headers=headers)

@ -95,3 +95,7 @@ def url_sonarr():
port = f":{settings.sonarr.port}" port = f":{settings.sonarr.port}"
return f"{protocol_sonarr}://{settings.sonarr.ip}{port}{settings.sonarr.base_url}" return f"{protocol_sonarr}://{settings.sonarr.ip}{port}{settings.sonarr.base_url}"
def url_api_sonarr():
return url_sonarr() + f'/api{"/v3" if not get_sonarr_info.is_legacy() else ""}/'

@ -4,16 +4,13 @@ import logging
import requests import requests
from app.config import settings from app.config import settings
from sonarr.info import get_sonarr_info, url_sonarr from sonarr.info import url_api_sonarr
from constants import headers from constants import headers
def notify_sonarr(sonarr_series_id): def notify_sonarr(sonarr_series_id):
try: try:
if get_sonarr_info.is_legacy(): url = f"{url_api_sonarr()}command?apikey={settings.sonarr.apikey}"
url = f"{url_sonarr()}/api/command?apikey={settings.sonarr.apikey}"
else:
url = f"{url_sonarr()}/api/v3/command?apikey={settings.sonarr.apikey}"
data = { data = {
'name': 'RescanSeries', 'name': 'RescanSeries',
'seriesId': int(sonarr_series_id) 'seriesId': int(sonarr_series_id)

@ -7,7 +7,7 @@ import logging
from app.config import settings from app.config import settings
from app.database import TableShowsRootfolder, TableShows, database, insert, update, delete, select from app.database import TableShowsRootfolder, TableShows, database, insert, update, delete, select
from utilities.path_mappings import path_mappings from utilities.path_mappings import path_mappings
from sonarr.info import get_sonarr_info, url_sonarr from sonarr.info import url_api_sonarr
from constants import headers from constants import headers
@ -16,10 +16,7 @@ def get_sonarr_rootfolder():
sonarr_rootfolder = [] sonarr_rootfolder = []
# Get root folder data from Sonarr # Get root folder data from Sonarr
if get_sonarr_info.is_legacy(): url_sonarr_api_rootfolder = f"{url_api_sonarr()}rootfolder?apikey={apikey_sonarr}"
url_sonarr_api_rootfolder = f"{url_sonarr()}/api/rootfolder?apikey={apikey_sonarr}"
else:
url_sonarr_api_rootfolder = f"{url_sonarr()}/api/v3/rootfolder?apikey={apikey_sonarr}"
try: try:
rootfolder = requests.get(url_sonarr_api_rootfolder, timeout=int(settings.sonarr.http_timeout), verify=False, headers=headers) rootfolder = requests.get(url_sonarr_api_rootfolder, timeout=int(settings.sonarr.http_timeout), verify=False, headers=headers)

@ -47,13 +47,11 @@ def sync_episodes(series_id, send_event=True):
episodes_to_add = [] episodes_to_add = []
# Get episodes data for a series from Sonarr # Get episodes data for a series from Sonarr
episodes = get_episodes_from_sonarr_api(url=url_sonarr(), apikey_sonarr=apikey_sonarr, episodes = get_episodes_from_sonarr_api(apikey_sonarr=apikey_sonarr, series_id=series_id)
series_id=series_id)
if episodes: if episodes:
# For Sonarr v3, we need to update episodes to integrate the episodeFile API endpoint results # For Sonarr v3, we need to update episodes to integrate the episodeFile API endpoint results
if not get_sonarr_info.is_legacy(): if not get_sonarr_info.is_legacy():
episodeFiles = get_episodesFiles_from_sonarr_api(url=url_sonarr(), apikey_sonarr=apikey_sonarr, episodeFiles = get_episodesFiles_from_sonarr_api(apikey_sonarr=apikey_sonarr, series_id=series_id)
series_id=series_id)
for episode in episodes: for episode in episodes:
if episodeFiles and episode['hasFile']: if episodeFiles and episode['hasFile']:
item = [x for x in episodeFiles if x['id'] == episode['episodeFileId']] item = [x for x in episodeFiles if x['id'] == episode['episodeFileId']]
@ -137,8 +135,7 @@ def sync_one_episode(episode_id, defer_search=False):
try: try:
# Get episode data from sonarr api # Get episode data from sonarr api
episode = None episode = None
episode_data = get_episodes_from_sonarr_api(url=url, apikey_sonarr=apikey_sonarr, episode_data = get_episodes_from_sonarr_api(apikey_sonarr=apikey_sonarr, episode_id=episode_id)
episode_id=episode_id)
if not episode_data: if not episode_data:
return return
@ -146,7 +143,7 @@ def sync_one_episode(episode_id, defer_search=False):
# For Sonarr v3, we need to update episodes to integrate the episodeFile API endpoint results # For Sonarr v3, we need to update episodes to integrate the episodeFile API endpoint results
if not get_sonarr_info.is_legacy() and existing_episode and episode_data['hasFile']: if not get_sonarr_info.is_legacy() and existing_episode and episode_data['hasFile']:
episode_data['episodeFile'] = \ episode_data['episodeFile'] = \
get_episodesFiles_from_sonarr_api(url=url, apikey_sonarr=apikey_sonarr, get_episodesFiles_from_sonarr_api(apikey_sonarr=apikey_sonarr,
episode_file_id=episode_data['episodeFileId']) episode_file_id=episode_data['episodeFileId'])
episode = episodeParser(episode_data) episode = episodeParser(episode_data)
except Exception: except Exception:

@ -4,7 +4,7 @@ import requests
import logging import logging
from app.config import settings from app.config import settings
from sonarr.info import get_sonarr_info, url_sonarr from sonarr.info import get_sonarr_info, url_api_sonarr
from constants import headers from constants import headers
@ -14,12 +14,12 @@ def get_profile_list():
# Get profiles data from Sonarr # Get profiles data from Sonarr
if get_sonarr_info.is_legacy(): if get_sonarr_info.is_legacy():
url_sonarr_api_series = f"{url_sonarr()}/api/profile?apikey={apikey_sonarr}" url_sonarr_api_series = f"{url_api_sonarr()}profile?apikey={apikey_sonarr}"
else: else:
if not get_sonarr_info.version().startswith('3.'): if not get_sonarr_info.version().startswith('3.'):
# return an empty list when using Sonarr >= v4 that does not support series languages profiles anymore # return an empty list when using Sonarr >= v4 that does not support series languages profiles anymore
return profiles_list return profiles_list
url_sonarr_api_series = f"{url_sonarr()}/api/v3/languageprofile?apikey={apikey_sonarr}" url_sonarr_api_series = f"{url_api_sonarr()}languageprofile?apikey={apikey_sonarr}"
try: try:
profiles_json = requests.get(url_sonarr_api_series, timeout=int(settings.sonarr.http_timeout), verify=False, profiles_json = requests.get(url_sonarr_api_series, timeout=int(settings.sonarr.http_timeout), verify=False,
@ -50,10 +50,7 @@ def get_tags():
tagsDict = [] tagsDict = []
# Get tags data from Sonarr # Get tags data from Sonarr
if get_sonarr_info.is_legacy(): url_sonarr_api_series = f"{url_api_sonarr()}tag?apikey={apikey_sonarr}"
url_sonarr_api_series = f"{url_sonarr()}/api/tag?apikey={apikey_sonarr}"
else:
url_sonarr_api_series = f"{url_sonarr()}/api/v3/tag?apikey={apikey_sonarr}"
try: try:
tagsDict = requests.get(url_sonarr_api_series, timeout=int(settings.sonarr.http_timeout), verify=False, headers=headers) tagsDict = requests.get(url_sonarr_api_series, timeout=int(settings.sonarr.http_timeout), verify=False, headers=headers)
@ -71,8 +68,8 @@ def get_tags():
def get_series_from_sonarr_api(url, apikey_sonarr, sonarr_series_id=None): def get_series_from_sonarr_api(url, apikey_sonarr, sonarr_series_id=None):
url_sonarr_api_series = (f"{url}/api/{'' if get_sonarr_info.is_legacy() else 'v3/'}series/" url_sonarr_api_series = (f"{url_api_sonarr()}series/{sonarr_series_id if sonarr_series_id else ''}?"
f"{sonarr_series_id if sonarr_series_id else ''}?apikey={apikey_sonarr}") f"apikey={apikey_sonarr}")
try: try:
r = requests.get(url_sonarr_api_series, timeout=int(settings.sonarr.http_timeout), verify=False, headers=headers) r = requests.get(url_sonarr_api_series, timeout=int(settings.sonarr.http_timeout), verify=False, headers=headers)
r.raise_for_status() r.raise_for_status()
@ -98,13 +95,11 @@ def get_series_from_sonarr_api(url, apikey_sonarr, sonarr_series_id=None):
return r.json() return r.json()
def get_episodes_from_sonarr_api(url, apikey_sonarr, series_id=None, episode_id=None): def get_episodes_from_sonarr_api(apikey_sonarr, series_id=None, episode_id=None):
if series_id: if series_id:
url_sonarr_api_episode = (f"{url}/api/{'' if get_sonarr_info.is_legacy() else 'v3/'}episode?" url_sonarr_api_episode = f"{url_api_sonarr()}episode?seriesId={series_id}&apikey={apikey_sonarr}"
f"seriesId={series_id}&apikey={apikey_sonarr}")
elif episode_id: elif episode_id:
url_sonarr_api_episode = (f"{url}/api/{'' if get_sonarr_info.is_legacy() else 'v3/'}episode/{episode_id}?" url_sonarr_api_episode = f"{url_api_sonarr()}episode/{episode_id}?apikey={apikey_sonarr}"
f"apikey={apikey_sonarr}")
else: else:
return return
@ -127,11 +122,11 @@ def get_episodes_from_sonarr_api(url, apikey_sonarr, series_id=None, episode_id=
return r.json() return r.json()
def get_episodesFiles_from_sonarr_api(url, apikey_sonarr, series_id=None, episode_file_id=None): def get_episodesFiles_from_sonarr_api(apikey_sonarr, series_id=None, episode_file_id=None):
if series_id: if series_id:
url_sonarr_api_episodeFiles = f"{url}/api/v3/episodeFile?seriesId={series_id}&apikey={apikey_sonarr}" url_sonarr_api_episodeFiles = f"{url_api_sonarr}episodeFile?seriesId={series_id}&apikey={apikey_sonarr}"
elif episode_file_id: elif episode_file_id:
url_sonarr_api_episodeFiles = f"{url}/api/v3/episodeFile/{episode_file_id}?apikey={apikey_sonarr}" url_sonarr_api_episodeFiles = f"{url_api_sonarr}episodeFile/{episode_file_id}?apikey={apikey_sonarr}"
else: else:
return return

Loading…
Cancel
Save