formatting
This commit is contained in:
@@ -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)
|
||||
|
||||
|
@@ -134,8 +134,9 @@ class SRUtil:
|
||||
logging.debug("Retrieved albums: %s", albums_out)
|
||||
return albums_out
|
||||
|
||||
async def get_tracks_by_album_id(self, album_id: int,
|
||||
quality: str = "FLAC") -> Optional[list | dict]:
|
||||
async def get_tracks_by_album_id(
|
||||
self, album_id: int, quality: str = "FLAC"
|
||||
) -> Optional[list | dict]:
|
||||
"""Get tracks by album ID
|
||||
Args:
|
||||
album_id (int): The ID of the album.
|
||||
|
Reference in New Issue
Block a user