Archived
Prepare retried jobs before requeue
This commit is contained in:
+90
@@ -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": ""}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user