Metadata test

This commit is contained in:
Dispatcharr 2025-10-10 11:03:10 -05:00
parent de53c88486
commit ddec17b430
2 changed files with 27 additions and 9 deletions

View file

@ -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

View file

@ -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: