Handle and log media workers search errors

This commit is contained in:
Fabio Manganiello 2021-12-03 21:54:41 +01:00
parent f478e1ff40
commit 46d8d575ba
Signed by untrusted user: blacklight
GPG key ID: D90FBA7F76362774
2 changed files with 28 additions and 5 deletions

View file

@ -362,11 +362,18 @@ class MediaPlugin(Plugin, ABC):
for media_type in types: for media_type in types:
try: try:
results[media_type].extend( items = results_queues[media_type].get(timeout=search_timeout)
results_queues[media_type].get(timeout=search_timeout)) if isinstance(items, Exception):
raise items
results[media_type].extend(items)
except queue.Empty: except queue.Empty:
self.logger.warning('Search for "{}" media type {} timed out'. self.logger.warning('Search for "{}" media type {} timed out'.
format(query, media_type)) format(query, media_type))
except Exception as e:
self.logger.warning('Error while searching for "{}", media type {}'.
format(query, media_type))
self.logger.exception(e)
flattened_results = [] flattened_results = []
@ -391,7 +398,10 @@ class MediaPlugin(Plugin, ABC):
@staticmethod @staticmethod
def _search_worker(query, search_hndl, results_queue): def _search_worker(query, search_hndl, results_queue):
def thread(): def thread():
results_queue.put(search_hndl.search(query)) try:
results_queue.put(search_hndl.search(query))
except Exception as e:
results_queue.put(e)
return thread return thread
def _get_search_handler_by_type(self, search_type): def _get_search_handler_by_type(self, search_type):

View file

@ -141,7 +141,11 @@ class TorrentPlugin(Plugin):
def _torrent_search_worker(self, imdb_id: str, category: str, q: queue.Queue): def _torrent_search_worker(self, imdb_id: str, category: str, q: queue.Queue):
base_url = self.torrent_base_urls.get(category) base_url = self.torrent_base_urls.get(category)
assert base_url, f'No such category: {category}' assert base_url, f'No such category: {category}'
q.put(requests.get(base_url.format(imdb_id)).json()) try:
results = requests.get(base_url.format(imdb_id)).json()
q.put(results)
except Exception as e:
q.put(e)
def _search_torrents(self, query, category): def _search_torrents(self, query, category):
imdb_results = self._imdb_query(query, category) imdb_results = self._imdb_query(query, category)
@ -156,13 +160,22 @@ class TorrentPlugin(Plugin):
] ]
results = [] results = []
errors = []
for worker in workers: for worker in workers:
worker.start() worker.start()
for q in result_queues: for q in result_queues:
results.append(q.get()) res_ = q.get()
if isinstance(res_, Exception):
errors.append(res_)
else:
results.append(res_)
for worker in workers: for worker in workers:
worker.join() worker.join()
if errors:
self.logger.warning(f'Torrent search errors: {[str(e) for e in errors]}')
return results return results
@staticmethod @staticmethod