formatting

This commit is contained in:
2025-08-21 15:08:13 -04:00
parent 22eaa2260e
commit dd8d07b2f0
3 changed files with 62 additions and 39 deletions

View File

@@ -14,7 +14,7 @@ from rq import get_current_job
from utils.sr_wrapper import SRUtil
# ---------- Config ----------
ROOT_DIR = Path("/storage/music2")
ROOT_DIR = Path("/storage/music2")
MAX_RETRIES = 3
THROTTLE_MIN = 0.3
THROTTLE_MAX = 1.0
@@ -40,9 +40,10 @@ sr = SRUtil()
# ---------- Helpers ----------
def cleanup_empty_dirs(root: Path):
"""
Recursively remove any directories under root that contain no files
Recursively remove any directories under root that contain no files
(empty or only empty subdirectories).
"""
for dirpath, dirnames, filenames in os.walk(root, topdown=False):
@@ -80,6 +81,7 @@ def ensure_unique_path(p: Path) -> Path:
short_id = uuid.uuid4().hex[:8]
return parent / f"{stem}_{short_id}{suffix}"
# ---------- Job ----------
def bulk_download(track_list: list, quality: str = "FLAC"):
"""
@@ -96,7 +98,7 @@ def bulk_download(track_list: list, quality: str = "FLAC"):
if job:
try:
job.meta["track_ids"] = [str(t) for t in (track_list or [])]
job.meta["tracks"] = [] # will hold per-track dicts
job.meta["tracks"] = [] # will hold per-track dicts
job.meta["progress"] = 0
job.meta["tarball"] = None
job.meta["status"] = "started"
@@ -105,9 +107,9 @@ def bulk_download(track_list: list, quality: str = "FLAC"):
logging.warning("Failed to init job.meta: %s", e)
async def process_tracks():
per_track_meta = [] # list of per-track dicts (JSON-safe)
all_final_files = [] # list[Path]
all_artists = set() # set[str]
per_track_meta = [] # list of per-track dicts (JSON-safe)
all_final_files = [] # list[Path]
all_artists = set() # set[str]
(ROOT_DIR / "completed").mkdir(parents=True, exist_ok=True)
@@ -121,10 +123,10 @@ def bulk_download(track_list: list, quality: str = "FLAC"):
for i, track_id in enumerate(track_list or []):
track_info = {
"track_id": str(track_id),
"status": "pending", # pending | success | failed
"file_path": None, # str | None
"error": None, # str | None
"attempts": 0, # int
"status": "pending", # pending | success | failed
"file_path": None, # str | None
"error": None, # str | None
"attempts": 0, # int
}
attempt = 0
@@ -157,12 +159,12 @@ def bulk_download(track_list: list, quality: str = "FLAC"):
# 4) Metadata from SR (prefer API over tags)
md = await sr.get_metadata_by_track_id(track_id) or {}
artist_raw = md.get("artist") or "Unknown Artist"
album_raw = md.get("album") or "Unknown Album"
title_raw = md.get("song") or f"Track {track_id}"
album_raw = md.get("album") or "Unknown Album"
title_raw = md.get("song") or f"Track {track_id}"
artist = sanitize_filename(artist_raw)
album = sanitize_filename(album_raw)
title = sanitize_filename(title_raw)
album = sanitize_filename(album_raw)
title = sanitize_filename(title_raw)
all_artists.add(artist)
@@ -186,7 +188,9 @@ def bulk_download(track_list: list, quality: str = "FLAC"):
break # success; exit retry loop
except Exception as e:
logging.error("Track %s attempt %s failed: %s", track_id, attempt, e)
logging.error(
"Track %s attempt %s failed: %s", track_id, attempt, e
)
track_info["error"] = str(e)
if attempt >= MAX_RETRIES:
track_info["status"] = "failed"
@@ -207,7 +211,9 @@ def bulk_download(track_list: list, quality: str = "FLAC"):
job.meta["tracks"] = per_track_meta
job.save_meta()
except Exception as e:
logging.warning("Failed to update job.meta after track %s: %s", track_id, e)
logging.warning(
"Failed to update job.meta after track %s: %s", track_id, e
)
# Throttle between tracks
await asyncio.sleep(random.uniform(THROTTLE_MIN, THROTTLE_MAX))
@@ -234,9 +240,9 @@ def bulk_download(track_list: list, quality: str = "FLAC"):
artist_counts[artist] = artist_counts.get(artist, 0) + 1
if artist_counts:
top_artist = sorted(
artist_counts.items(), key=lambda kv: (-kv[1], kv[0])
)[0][0]
top_artist = sorted(artist_counts.items(), key=lambda kv: (-kv[1], kv[0]))[
0
][0]
else:
top_artist = "Unknown Artist"
@@ -253,7 +259,7 @@ def bulk_download(track_list: list, quality: str = "FLAC"):
job.meta["status"] = "compressing"
job.save_meta()
except Exception:
pass
pass
logging.info("Creating tarball: %s", staged_tarball)