feat(sources): YouTube Music search + download pipeline (§1C/§1E)
Pluggable fetch source: ytmusicapi search + yt-dlp download (cookies-file guard), DownloadJob entity/repo + DownloadService, download_task worker with exponential-backoff retries, and wired /search, /sources/{source}/search, and /downloads endpoints. Adds youtube_enabled/cookies config, yt-dlp+ytmusicapi deps, and the download_jobs.track_id migration. Snapshot also bundles in-progress storage/tracks/acoustid edits.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -48,12 +48,17 @@ def test_info_reports_kind_and_availability(tmp_path: Path) -> None:
|
||||
|
||||
|
||||
def test_registry_registers_local_when_path_set(tmp_path: Path) -> None:
|
||||
registry = build_source_registry(_settings(local_media_import_path=tmp_path))
|
||||
# Disable youtube to isolate the local-source registration under test.
|
||||
registry = build_source_registry(
|
||||
_settings(local_media_import_path=tmp_path, youtube_enabled=False)
|
||||
)
|
||||
names = {info.name for info in registry.infos()}
|
||||
assert names == {"local"}
|
||||
assert registry.indexable("local").is_available() is True
|
||||
|
||||
|
||||
def test_registry_empty_when_path_unset() -> None:
|
||||
registry = build_source_registry(_settings(local_media_import_path=None))
|
||||
registry = build_source_registry(
|
||||
_settings(local_media_import_path=None, youtube_enabled=False)
|
||||
)
|
||||
assert registry.infos() == []
|
||||
|
||||
Reference in New Issue
Block a user