mirror of https://github.com/morpheus65535/bazarr
no log: centralized Sonarr/Radarr API url definition and improved usage
This commit is contained in:
parent
54f9570a22
commit
0d882b3d6e
|
@ -9,8 +9,8 @@ from functools import wraps
|
|||
from urllib.parse import unquote
|
||||
|
||||
from constants import headers
|
||||
from sonarr.info import get_sonarr_info, url_sonarr
|
||||
from radarr.info import get_radarr_info, url_radarr
|
||||
from sonarr.info import url_api_sonarr
|
||||
from radarr.info import url_api_radarr
|
||||
from utilities.helper import check_credentials
|
||||
|
||||
from .config import settings, base_url
|
||||
|
@ -109,10 +109,7 @@ def series_images(url):
|
|||
url = url.strip("/")
|
||||
apikey = settings.sonarr.apikey
|
||||
baseUrl = settings.sonarr.base_url
|
||||
if get_sonarr_info.is_legacy():
|
||||
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')
|
||||
url_image = f'{url_api_sonarr()}{url.lstrip(baseUrl)}?apikey={apikey}'.replace('poster-250', 'poster-500')
|
||||
try:
|
||||
req = requests.get(url_image, stream=True, timeout=15, verify=False, headers=headers)
|
||||
except Exception:
|
||||
|
@ -126,10 +123,7 @@ def series_images(url):
|
|||
def movies_images(url):
|
||||
apikey = settings.radarr.apikey
|
||||
baseUrl = settings.radarr.base_url
|
||||
if get_radarr_info.is_legacy():
|
||||
url_image = f'{url_radarr()}/api/{url.lstrip(baseUrl)}?apikey={apikey}'
|
||||
else:
|
||||
url_image = f'{url_radarr()}/api/v3/{url.lstrip(baseUrl)}?apikey={apikey}'
|
||||
url_image = f'{url_api_radarr()}{url.lstrip(baseUrl)}?apikey={apikey}'
|
||||
try:
|
||||
req = requests.get(url_image, stream=True, timeout=15, verify=False, headers=headers)
|
||||
except Exception:
|
||||
|
|
|
@ -4,7 +4,7 @@ import requests
|
|||
import logging
|
||||
|
||||
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
|
||||
|
||||
|
||||
|
@ -12,14 +12,8 @@ def browse_radarr_filesystem(path='#'):
|
|||
if path == '#':
|
||||
path = ''
|
||||
|
||||
if get_radarr_info.is_legacy():
|
||||
url_radarr_api_filesystem = (f"{url_radarr()}/api/filesystem?path={path}&"
|
||||
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}")
|
||||
url_radarr_api_filesystem = (f"{url_api_radarr()}filesystem?path={path}&allowFoldersWithoutTrailingSlashes=true&"
|
||||
f"includeFiles=false&apikey={settings.radarr.apikey}")
|
||||
try:
|
||||
r = requests.get(url_radarr_api_filesystem, timeout=int(settings.radarr.http_timeout), verify=False,
|
||||
headers=headers)
|
||||
|
|
|
@ -95,3 +95,7 @@ def url_radarr():
|
|||
port = f":{settings.radarr.port}"
|
||||
|
||||
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
|
||||
|
||||
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
|
||||
|
||||
|
||||
def notify_radarr(radarr_id):
|
||||
try:
|
||||
if get_radarr_info.is_legacy():
|
||||
url = f"{url_radarr()}/api/command?apikey={settings.radarr.apikey}"
|
||||
else:
|
||||
url = f"{url_radarr()}/api/v3/command?apikey={settings.radarr.apikey}"
|
||||
url = f"{url_api_radarr()}command?apikey={settings.radarr.apikey}"
|
||||
data = {
|
||||
'name': 'RescanMovie',
|
||||
'movieId': int(radarr_id)
|
||||
|
|
|
@ -7,7 +7,7 @@ import logging
|
|||
from app.config import settings
|
||||
from utilities.path_mappings import path_mappings
|
||||
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
|
||||
|
||||
|
||||
|
@ -16,10 +16,7 @@ def get_radarr_rootfolder():
|
|||
radarr_rootfolder = []
|
||||
|
||||
# Get root folder data from Radarr
|
||||
if get_radarr_info.is_legacy():
|
||||
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}"
|
||||
url_radarr_api_rootfolder = f"{url_api_radarr()}rootfolder?apikey={apikey_radarr}"
|
||||
|
||||
try:
|
||||
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 app.config import settings
|
||||
from radarr.info import url_radarr
|
||||
from utilities.path_mappings import path_mappings
|
||||
from subtitles.indexer.movies import store_subtitles_movie, movies_full_scan_subtitles
|
||||
from radarr.rootfolder import check_radarr_rootfolder
|
||||
|
@ -82,7 +81,7 @@ def update_movies(send_event=True):
|
|||
tagsDict = get_tags()
|
||||
|
||||
# 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):
|
||||
return
|
||||
else:
|
||||
|
@ -100,7 +99,6 @@ def update_movies(send_event=True):
|
|||
'movieFile' in movie and
|
||||
(movie['movieFile']['size'] > 20480 or
|
||||
get_movie_file_size_from_db(movie['movieFile']['path']) > 20480)]
|
||||
movies_to_add = []
|
||||
|
||||
# Remove old movies from DB
|
||||
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:
|
||||
# Get movie data from radarr api
|
||||
movie = None
|
||||
movie_data = get_movies_from_radarr_api(url=url_radarr(), apikey_radarr=settings.radarr.apikey,
|
||||
radarr_id=movie_id)
|
||||
movie_data = get_movies_from_radarr_api(apikey_radarr=settings.radarr.apikey, radarr_id=movie_id)
|
||||
if not movie_data:
|
||||
return
|
||||
else:
|
||||
|
|
|
@ -4,7 +4,7 @@ import requests
|
|||
import logging
|
||||
|
||||
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
|
||||
|
||||
|
||||
|
@ -12,10 +12,8 @@ def get_profile_list():
|
|||
apikey_radarr = settings.radarr.apikey
|
||||
profiles_list = []
|
||||
# Get profiles data from radarr
|
||||
if get_radarr_info.is_legacy():
|
||||
url_radarr_api_movies = f"{url_radarr()}/api/profile?apikey={apikey_radarr}"
|
||||
else:
|
||||
url_radarr_api_movies = f"{url_radarr()}/api/v3/qualityprofile?apikey={apikey_radarr}"
|
||||
url_radarr_api_movies = (f"{url_api_radarr()}{'quality' if url_api_radarr().endswith('v3/') else ''}profile?"
|
||||
f"apikey={apikey_radarr}")
|
||||
|
||||
try:
|
||||
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 = []
|
||||
|
||||
# Get tags data from Radarr
|
||||
if get_radarr_info.is_legacy():
|
||||
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}"
|
||||
url_radarr_api_series = f"{url_api_radarr()}tag?apikey={apikey_radarr}"
|
||||
|
||||
try:
|
||||
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 []
|
||||
|
||||
|
||||
def get_movies_from_radarr_api(url, apikey_radarr, radarr_id=None):
|
||||
if get_radarr_info.is_legacy():
|
||||
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}'
|
||||
def get_movies_from_radarr_api(apikey_radarr, radarr_id=None):
|
||||
url_radarr_api_movies = f'{url_api_radarr()}movie{f"/{radarr_id}" if radarr_id else ""}?apikey={apikey_radarr}'
|
||||
|
||||
try:
|
||||
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
|
||||
|
||||
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
|
||||
|
||||
|
||||
def browse_sonarr_filesystem(path='#'):
|
||||
if path == '#':
|
||||
path = ''
|
||||
if get_sonarr_info.is_legacy():
|
||||
url_sonarr_api_filesystem = (f"{url_sonarr()}/api/filesystem?path={path}&"
|
||||
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}")
|
||||
url_sonarr_api_filesystem = (f"{url_api_sonarr()}filesystem?path={path}&allowFoldersWithoutTrailingSlashes=true&"
|
||||
f"includeFiles=false&apikey={settings.sonarr.apikey}")
|
||||
try:
|
||||
r = requests.get(url_sonarr_api_filesystem, timeout=int(settings.sonarr.http_timeout), verify=False,
|
||||
headers=headers)
|
||||
|
|
|
@ -95,3 +95,7 @@ def url_sonarr():
|
|||
port = f":{settings.sonarr.port}"
|
||||
|
||||
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
|
||||
|
||||
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
|
||||
|
||||
|
||||
def notify_sonarr(sonarr_series_id):
|
||||
try:
|
||||
if get_sonarr_info.is_legacy():
|
||||
url = f"{url_sonarr()}/api/command?apikey={settings.sonarr.apikey}"
|
||||
else:
|
||||
url = f"{url_sonarr()}/api/v3/command?apikey={settings.sonarr.apikey}"
|
||||
url = f"{url_api_sonarr()}command?apikey={settings.sonarr.apikey}"
|
||||
data = {
|
||||
'name': 'RescanSeries',
|
||||
'seriesId': int(sonarr_series_id)
|
||||
|
|
|
@ -7,7 +7,7 @@ import logging
|
|||
from app.config import settings
|
||||
from app.database import TableShowsRootfolder, TableShows, database, insert, update, delete, select
|
||||
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
|
||||
|
||||
|
||||
|
@ -16,10 +16,7 @@ def get_sonarr_rootfolder():
|
|||
sonarr_rootfolder = []
|
||||
|
||||
# Get root folder data from Sonarr
|
||||
if get_sonarr_info.is_legacy():
|
||||
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}"
|
||||
url_sonarr_api_rootfolder = f"{url_api_sonarr()}rootfolder?apikey={apikey_sonarr}"
|
||||
|
||||
try:
|
||||
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 = []
|
||||
|
||||
# Get episodes data for a series from Sonarr
|
||||
episodes = get_episodes_from_sonarr_api(url=url_sonarr(), apikey_sonarr=apikey_sonarr,
|
||||
series_id=series_id)
|
||||
episodes = get_episodes_from_sonarr_api(apikey_sonarr=apikey_sonarr, series_id=series_id)
|
||||
if episodes:
|
||||
# For Sonarr v3, we need to update episodes to integrate the episodeFile API endpoint results
|
||||
if not get_sonarr_info.is_legacy():
|
||||
episodeFiles = get_episodesFiles_from_sonarr_api(url=url_sonarr(), apikey_sonarr=apikey_sonarr,
|
||||
series_id=series_id)
|
||||
episodeFiles = get_episodesFiles_from_sonarr_api(apikey_sonarr=apikey_sonarr, series_id=series_id)
|
||||
for episode in episodes:
|
||||
if episodeFiles and episode['hasFile']:
|
||||
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:
|
||||
# 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)
|
||||
episode_data = get_episodes_from_sonarr_api(apikey_sonarr=apikey_sonarr, episode_id=episode_id)
|
||||
if not episode_data:
|
||||
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
|
||||
if not get_sonarr_info.is_legacy() and existing_episode and episode_data['hasFile']:
|
||||
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 = episodeParser(episode_data)
|
||||
except Exception:
|
||||
|
|
|
@ -4,7 +4,7 @@ import requests
|
|||
import logging
|
||||
|
||||
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
|
||||
|
||||
|
||||
|
@ -14,12 +14,12 @@ def get_profile_list():
|
|||
|
||||
# Get profiles data from Sonarr
|
||||
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:
|
||||
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 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:
|
||||
profiles_json = requests.get(url_sonarr_api_series, timeout=int(settings.sonarr.http_timeout), verify=False,
|
||||
|
@ -50,10 +50,7 @@ def get_tags():
|
|||
tagsDict = []
|
||||
|
||||
# Get tags data from Sonarr
|
||||
if get_sonarr_info.is_legacy():
|
||||
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}"
|
||||
url_sonarr_api_series = f"{url_api_sonarr()}tag?apikey={apikey_sonarr}"
|
||||
|
||||
try:
|
||||
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):
|
||||
url_sonarr_api_series = (f"{url}/api/{'' if get_sonarr_info.is_legacy() else 'v3/'}series/"
|
||||
f"{sonarr_series_id if sonarr_series_id else ''}?apikey={apikey_sonarr}")
|
||||
url_sonarr_api_series = (f"{url_api_sonarr()}series/{sonarr_series_id if sonarr_series_id else ''}?"
|
||||
f"apikey={apikey_sonarr}")
|
||||
try:
|
||||
r = requests.get(url_sonarr_api_series, timeout=int(settings.sonarr.http_timeout), verify=False, headers=headers)
|
||||
r.raise_for_status()
|
||||
|
@ -98,13 +95,11 @@ def get_series_from_sonarr_api(url, apikey_sonarr, sonarr_series_id=None):
|
|||
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:
|
||||
url_sonarr_api_episode = (f"{url}/api/{'' if get_sonarr_info.is_legacy() else 'v3/'}episode?"
|
||||
f"seriesId={series_id}&apikey={apikey_sonarr}")
|
||||
url_sonarr_api_episode = f"{url_api_sonarr()}episode?seriesId={series_id}&apikey={apikey_sonarr}"
|
||||
elif episode_id:
|
||||
url_sonarr_api_episode = (f"{url}/api/{'' if get_sonarr_info.is_legacy() else 'v3/'}episode/{episode_id}?"
|
||||
f"apikey={apikey_sonarr}")
|
||||
url_sonarr_api_episode = f"{url_api_sonarr()}episode/{episode_id}?apikey={apikey_sonarr}"
|
||||
else:
|
||||
return
|
||||
|
||||
|
@ -127,11 +122,11 @@ def get_episodes_from_sonarr_api(url, apikey_sonarr, series_id=None, episode_id=
|
|||
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:
|
||||
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:
|
||||
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:
|
||||
return
|
||||
|
||||
|
|
Loading…
Reference in New Issue