Prepare retried jobs before requeue

This commit is contained in:
Codex
2026-08-01 17:51:59 +02:00
parent edb565d855
commit f417a96811
6 changed files with 153 additions and 19 deletions
+90
View File
@@ -532,6 +532,66 @@ class QueueApiTests(unittest.TestCase):
self.assertEqual(retried["status"], "pending")
self.assertFalse(retried["cancel_requested"])
def test_retry_prepares_failed_job_before_requeue(self):
queue = APP.DownloadQueue(
lambda: {"mode": "sub", "quality": "best", "download_dir": "/tmp/example"},
job_prepare_fn=lambda job: {**job, "result_index": 3},
start_worker=False,
)
created = queue.add(
{
"query": "Retry Show",
"title": "Retry Show",
"anime_name": "Retry Show",
"mode": "sub",
"quality": "best",
"episodes": "1",
"download_dir": "/tmp/example",
"season": "1",
}
)
with queue.lock:
job = queue._find(created["id"])
job["status"] = "failed"
job["result_index"] = None
queue._save_job_locked(job)
retried = queue.retry(created["id"])
self.assertEqual(retried["status"], "pending")
self.assertEqual(retried["result_index"], 3)
def test_retry_all_failed_prepares_jobs_before_requeue(self):
queue = APP.DownloadQueue(
lambda: {"mode": "sub", "quality": "best", "download_dir": "/tmp/example"},
job_prepare_fn=lambda job: {**job, "result_index": 4},
start_worker=False,
)
created = queue.add(
{
"query": "Retry All Show",
"title": "Retry All Show",
"anime_name": "Retry All Show",
"mode": "sub",
"quality": "best",
"episodes": "1",
"download_dir": "/tmp/example",
"season": "1",
}
)
with queue.lock:
job = queue._find(created["id"])
job["status"] = "failed"
job["result_index"] = None
queue._save_job_locked(job)
result = queue.retry_all_failed()
retried = queue.get(created["id"])
self.assertEqual(result["count"], 1)
self.assertEqual(retried["status"], "pending")
self.assertEqual(retried["result_index"], 4)
def test_add_reuses_matching_failed_job_instead_of_creating_duplicate(self):
payload = {
"show_id": "show-42",
@@ -1887,6 +1947,36 @@ class WatchlistCompletionTests(unittest.TestCase):
self.assertEqual(prepared["show_id"], "show-42")
self.assertEqual(prepared["title"], "Queue Show")
def test_prepare_download_job_infers_result_index_from_show_id(self):
job = {"query": "Queue Show", "mode": "sub", "title": "Queue Show", "show_id": "show-99"}
with mock.patch.object(
APP,
"search_anime",
return_value=[
{"id": "show-42", "title": "Queue Show"},
{"id": "show-99", "title": "Queue Show Season 4"},
],
):
prepared = APP.prepare_download_job(dict(job))
self.assertEqual(prepared["result_index"], 2)
def test_prepare_download_job_infers_result_index_from_unique_title_match(self):
job = {"query": "Queue Show", "mode": "sub", "title": "Queue Show", "show_id": ""}
with mock.patch.object(
APP,
"search_anime",
return_value=[
{"id": "show-42", "title": "Queue Show"},
{"id": "show-99", "title": "Different Show"},
],
):
prepared = APP.prepare_download_job(dict(job))
self.assertEqual(prepared["result_index"], 1)
def test_prepare_download_job_accepts_equivalent_season_notation(self):
job = {"query": "Queue Show 2nd Season", "mode": "sub", "result_index": 1, "title": "Queue Show 2nd Season", "show_id": ""}