From ddec17b430afdc940ce99a183bfbd9c259aa9643 Mon Sep 17 00:00:00 2001 From: Dispatcharr Date: Fri, 10 Oct 2025 11:03:10 -0500 Subject: [PATCH] Metadata test --- apps/media_library/metadata.py | 23 +++++++++++++++-------- apps/media_library/tasks.py | 13 ++++++++++++- 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/apps/media_library/metadata.py b/apps/media_library/metadata.py index 237e3c03..4f1231de 100644 --- a/apps/media_library/metadata.py +++ b/apps/media_library/metadata.py @@ -1,6 +1,7 @@ import logging from typing import Any, Dict, Optional +import requests import tmdbsimple as tmdb from dateutil import parser as date_parser from django.conf import settings @@ -15,6 +16,12 @@ logger = logging.getLogger(__name__) TMDB_API_KEY_SETTING = "tmdb-api-key" TMDB_IMAGE_BASE = "https://image.tmdb.org/t/p/original" METADATA_CACHE_TIMEOUT = 60 * 60 * 6 # 6 hours +_REQUESTS_SESSION = requests.Session() +_REQUESTS_SESSION.mount( + "https://", + requests.adapters.HTTPAdapter(pool_connections=20, pool_maxsize=40, max_retries=3), +) +tmdb.REQUESTS_SESSION = _REQUESTS_SESSION def get_tmdb_api_key() -> Optional[str]: @@ -89,12 +96,12 @@ def fetch_tmdb_metadata(media_item: MediaItem) -> Optional[Dict[str, Any]]: try: if media_item.is_movie: movie = tmdb.Movies(lookup_id) - info = movie.info() - credits = movie.credits() + info = movie.info(append_to_response="credits,images") + credits = info.get("credits", {}) elif media_item.item_type == MediaItem.TYPE_SHOW: tv = tmdb.TV(lookup_id) - info = tv.info() - credits = tv.credits() + info = tv.info(append_to_response="credits,images") + credits = info.get("credits", {}) except Exception: # noqa: BLE001 logger.exception( "Failed to retrieve TMDB info for %s using id %s", media_item, tmdb_id @@ -131,12 +138,12 @@ def fetch_tmdb_metadata(media_item: MediaItem) -> Optional[Dict[str, Any]]: try: if media_item.is_movie: movie = tmdb.Movies(tmdb_id) - info = movie.info() - credits = movie.credits() + info = movie.info(append_to_response="credits,images") + credits = info.get("credits", {}) elif media_item.item_type == MediaItem.TYPE_SHOW: tv = tmdb.TV(tmdb_id) - info = tv.info() - credits = tv.credits() + info = tv.info(append_to_response="credits,images") + credits = info.get("credits", {}) else: return None except Exception: # noqa: BLE001 diff --git a/apps/media_library/tasks.py b/apps/media_library/tasks.py index 3a959a9f..ce6590a4 100644 --- a/apps/media_library/tasks.py +++ b/apps/media_library/tasks.py @@ -7,6 +7,7 @@ from celery import shared_task from celery.result import AsyncResult from asgiref.sync import async_to_sync from channels.layers import get_channel_layer +from django.conf import settings from django.db import transaction from django.db.models import Q from django.utils import timezone @@ -30,6 +31,9 @@ from apps.media_library.vod_sync import ( logger = logging.getLogger(__name__) +METADATA_TASK_QUEUE = getattr(settings, "CELERY_METADATA_QUEUE", None) +METADATA_TASK_PRIORITY = getattr(settings, "CELERY_METADATA_PRIORITY", None) + def _start_next_scan(library: Library) -> None: if library.scans.filter(status=LibraryScan.STATUS_RUNNING).exists(): @@ -391,7 +395,14 @@ def scan_library_task( if item.id in metadata_queue_ids: return False metadata_queue_ids.add(item.id) - sync_metadata_task.delay(item.id, scan_id=str(scan.id)) + args = (item.id,) + kwargs = {"scan_id": str(scan.id)} + options = {} + if METADATA_TASK_QUEUE: + options["queue"] = METADATA_TASK_QUEUE + if METADATA_TASK_PRIORITY is not None: + options["priority"] = METADATA_TASK_PRIORITY + sync_metadata_task.apply_async(args=args, kwargs=kwargs, **options) return True def refresh_stage_counters() -> None: