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:
+1
-3
@@ -79,9 +79,7 @@ async def _create_test_db_if_missing() -> None:
|
||||
except Exception:
|
||||
return
|
||||
try:
|
||||
exists = await conn.fetchval(
|
||||
"SELECT 1 FROM pg_database WHERE datname = $1", _TEST_DB_NAME
|
||||
)
|
||||
exists = await conn.fetchval("SELECT 1 FROM pg_database WHERE datname = $1", _TEST_DB_NAME)
|
||||
if not exists:
|
||||
# CREATE DATABASE can't run inside a transaction; asyncpg's implicit
|
||||
# autocommit on a bare connection handles that.
|
||||
|
||||
Reference in New Issue
Block a user