bazarr/bazarr/api/system/searches.py

65 lines
2.1 KiB
Python

# coding=utf-8
from flask_restx import Resource, Namespace, reqparse
from unidecode import unidecode
from app.config import settings
from app.database import TableShows, TableMovies, database, select
from ..utils import authenticate
api_ns_system_searches = Namespace('System Searches', description='Search for series or movies by name')
@api_ns_system_searches.route('system/searches')
class Searches(Resource):
get_request_parser = reqparse.RequestParser()
get_request_parser.add_argument('query', type=str, required=True, help='Series or movie name to search for')
@authenticate
@api_ns_system_searches.doc(parser=get_request_parser)
@api_ns_system_searches.response(200, 'Success')
@api_ns_system_searches.response(401, 'Not Authenticated')
def get(self):
"""List results from query"""
args = self.get_request_parser.parse_args()
query = unidecode(args.get('query')).lower()
search_list = []
if query:
if settings.general.use_sonarr:
# Get matching series
search_list += database.execute(
select(TableShows.title,
TableShows.sonarrSeriesId,
TableShows.year)
.order_by(TableShows.title)) \
.all()
if settings.general.use_radarr:
# Get matching movies
search_list += database.execute(
select(TableMovies.title,
TableMovies.radarrId,
TableMovies.year)
.order_by(TableMovies.title)) \
.all()
results = []
for x in search_list:
if query in unidecode(x.title).lower():
result = {
'title': x.title,
'year': x.year,
}
if hasattr(x, 'sonarrSeriesId'):
result['sonarrSeriesId'] = x.sonarrSeriesId
else:
result['radarrId'] = x.radarrId
results.append(result)
return results