formatting
This commit is contained in:
@@ -9,9 +9,12 @@ from rq import Queue, Retry
|
||||
from rq.job import Job
|
||||
from rq.job import JobStatus
|
||||
from rq.registry import (
|
||||
StartedJobRegistry, DeferredJobRegistry,
|
||||
FinishedJobRegistry, FailedJobRegistry,
|
||||
ScheduledJobRegistry)
|
||||
StartedJobRegistry,
|
||||
DeferredJobRegistry,
|
||||
FinishedJobRegistry,
|
||||
FailedJobRegistry,
|
||||
ScheduledJobRegistry,
|
||||
)
|
||||
from utils.rip_background import bulk_download
|
||||
from lyric_search.sources import private
|
||||
from typing import Literal
|
||||
@@ -87,7 +90,9 @@ class RIP(FastAPI):
|
||||
"started_at": job.started_at,
|
||||
"ended_at": job.ended_at,
|
||||
"progress": progress,
|
||||
"tracks": f"{tracks_out} / {tracks_in}" if isinstance(tracks_in, int) else tracks_out,
|
||||
"tracks": f"{tracks_out} / {tracks_in}"
|
||||
if isinstance(tracks_in, int)
|
||||
else tracks_out,
|
||||
"target": job.meta.get("target"),
|
||||
"quality": job.meta.get("quality", "Unknown"),
|
||||
}
|
||||
@@ -111,8 +116,11 @@ class RIP(FastAPI):
|
||||
return JSONResponse(content=albums)
|
||||
|
||||
async def tracks_by_album_id_handler(
|
||||
self, album_id: int, request: Request, user=Depends(get_current_user),
|
||||
quality: str = "FLAC"
|
||||
self,
|
||||
album_id: int,
|
||||
request: Request,
|
||||
user=Depends(get_current_user),
|
||||
quality: str = "FLAC",
|
||||
) -> Response:
|
||||
"""Get tracks by album id"""
|
||||
tracks = await self.trip_util.get_tracks_by_album_id(album_id, quality)
|
||||
@@ -131,7 +139,11 @@ class RIP(FastAPI):
|
||||
return JSONResponse(content=tracks)
|
||||
|
||||
async def track_by_id_handler(
|
||||
self, track_id: int, quality: str, request: Request, user=Depends(get_current_user)
|
||||
self,
|
||||
track_id: int,
|
||||
quality: str,
|
||||
request: Request,
|
||||
user=Depends(get_current_user),
|
||||
) -> Response:
|
||||
"""Get track by ID"""
|
||||
track = await self.trip_util.get_stream_url_by_track_id(track_id, quality)
|
||||
@@ -157,19 +169,21 @@ class RIP(FastAPI):
|
||||
target = data.target
|
||||
job = self.task_queue.enqueue(
|
||||
bulk_download,
|
||||
args=(track_ids, data.quality,),
|
||||
args=(
|
||||
track_ids,
|
||||
data.quality,
|
||||
),
|
||||
job_timeout=14400,
|
||||
failure_ttl=86400,
|
||||
result_ttl=-1,
|
||||
retry=Retry(max=1, interval=[30]),
|
||||
meta={
|
||||
'progress': 0,
|
||||
'status': 'queued',
|
||||
'target': target,
|
||||
'tracks_in': len(track_ids),
|
||||
'quality': data.quality,
|
||||
}
|
||||
|
||||
"progress": 0,
|
||||
"status": "queued",
|
||||
"target": target,
|
||||
"tracks_in": len(track_ids),
|
||||
"quality": data.quality,
|
||||
},
|
||||
)
|
||||
self.redis_conn.lpush("enqueued_job_ids", job.id)
|
||||
return JSONResponse(
|
||||
@@ -181,7 +195,9 @@ class RIP(FastAPI):
|
||||
}
|
||||
)
|
||||
|
||||
async def job_status_handler(self, job_id: str, request: Request, user=Depends(get_current_user)):
|
||||
async def job_status_handler(
|
||||
self, job_id: str, request: Request, user=Depends(get_current_user)
|
||||
):
|
||||
"""Get status and result of a single job"""
|
||||
|
||||
job = None
|
||||
|
@@ -40,6 +40,7 @@ sr = SRUtil()
|
||||
|
||||
# ---------- Helpers ----------
|
||||
|
||||
|
||||
def cleanup_empty_dirs(root: Path):
|
||||
"""
|
||||
Recursively remove any directories under root that contain no files
|
||||
@@ -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"):
|
||||
"""
|
||||
@@ -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"
|
||||
|
||||
|
@@ -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