MediaProcessing/apps/py-metadata/worker/search_runner.py
2026-01-04 15:12:59 +01:00

32 lines
1.0 KiB
Python

# search_runner.py
import asyncio
from typing import List
from models.metadata import Metadata
from utils.logger import logger
from sources.factory import get_all_sources
async def run_search(titles: List[str]) -> List[Metadata]:
"""
Kjører alle kilder parallelt på gitt titler.
Returnerer en liste av Metadata fra alle kilder.
Ingen mapping eller scoring gjøres her.
"""
sources = get_all_sources(titles)
# Kjør alle kildesøk parallelt
results = await asyncio.gather(*(s.search() for s in sources), return_exceptions=True)
metadata_results: List[Metadata] = []
for source, r in zip(sources, results):
if isinstance(r, Exception):
logger.warning(
f"Kilde '{source.__class__.__name__}' feilet under søk "
f"med titler={source.titles}: {r}"
)
elif r is not None:
metadata_results.append(r)
logger.info(f"Søk ferdig: {len(metadata_results)} resultater fra {len(sources)} kilder")
return metadata_results