fix: harden utility export recovery

This commit is contained in:
Media
2026-08-12 18:59:48 -05:00
parent d339e10c47
commit e924b0d099
7 changed files with 71 additions and 14 deletions
+1 -1
View File
@@ -209,7 +209,7 @@ class ConfigurationTests(unittest.TestCase):
("export_max_workers", 0),
("export_max_workers", 11),
("max_queued_exports", 0),
("max_queued_exports", 1001),
("max_queued_exports", 101),
)
for field, value in cases:
with self.subTest(field=field), tempfile.TemporaryDirectory() as directory:
+31 -1
View File
@@ -73,6 +73,7 @@ class FakeExportRunner:
"mp4": ".mp4",
"matroska": ".mkv",
"webm": ".webm",
"mov": ".mov",
}[self.container]
for index in range(1, self.playlist_items + 1):
(template.parent / f"{index:03d} - Tést Item {index} [id{index}]{extension}").write_bytes(
@@ -112,7 +113,7 @@ class FakeExportRunner:
],
"format": {
"format_name": "mov,mp4,m4a,3gp,3g2,mj2"
if converted or self.container == "mp4"
if converted or self.container in {"mp4", "mov"}
else self.container
},
}
@@ -240,6 +241,35 @@ class UtilityExportTests(unittest.TestCase):
self.assertEqual(arguments[arguments.index("-c:a") + 1], "copy")
self.assertNotIn("libx264", arguments)
def test_quicktime_alias_is_remuxed_instead_of_renamed_to_mp4(self):
runner = FakeExportRunner(container="mov")
result = self.manager(runner).enqueue_export(
"https://www.youtube.com/watch?v=mov", "mp4", None, None
)
self.assertEqual(self.store.get_export_job(result.job_id).status, "completed")
arguments = runner.ffmpeg_calls[0]
self.assertEqual(arguments[arguments.index("-c:v") + 1], "copy")
self.assertEqual(arguments[arguments.index("-c:a") + 1], "copy")
self.assertNotIn("libx264", arguments)
def test_export_reconciliation_is_submitted_to_dedicated_executor(self):
export_executor = QueuedExecutor()
manager = DownloadManager(
self.config,
self.store,
runner=FakeExportRunner(),
executor=ImmediateExecutor(),
export_executor=export_executor,
)
self.assertTrue(manager.schedule_export_reconciliation())
self.assertEqual(len(export_executor.calls), 1)
_, function, arguments, keyword_arguments = export_executor.calls[0]
self.assertEqual(function, manager.reconcile_export_artifacts)
self.assertEqual(arguments, ())
self.assertEqual(keyword_arguments, {})
def test_lower_resolution_mp4_is_preserved_without_scaling(self):
runner = FakeExportRunner(height=720)
result = self.manager(runner).enqueue_export(
+2 -1
View File
@@ -106,8 +106,9 @@ class FakeDownloadManager:
max_active=20,
)
def reconcile_export_artifacts(self):
def schedule_export_reconciliation(self):
self.export_reconciled = True
return True
def recover_pending_deletions(self):
self.recovered = True