Continue after provider playlist errors

This commit is contained in:
Dymas
2026-09-07 22:07:46 +02:00
parent d39d783738
commit a5401873cb
5 changed files with 72 additions and 9 deletions
+51
View File
@@ -4824,6 +4824,57 @@ https://shard-102.snapcdn.top/anime/show/episode/seg-f1-00083.css
self.assertEqual(raised.exception.code, 0)
self.assertEqual(calls, ["HD-1", "HD-2"])
def test_provider_downloader_tries_next_source_after_playlist_exception(self):
calls = []
def fake_bridge(command, provider, *args):
if command == "info":
return {"title": "Retry Exception Show"}
if command == "episodes":
return {"episodes": [{"number": 1, "id": "ep1"}]}
if command == "resolve-all":
return {
"sources": [
{"url": "https://bad.example/master.m3u8", "server": "StreamHG", "type": "dub"},
{"url": "https://good.example/master.m3u8", "server": "Earnvids", "type": "dub"},
]
}
raise AssertionError(f"unexpected bridge command {command}")
def fake_download(stream, target, episode_number=None, episode_index=None, episode_total=None):
calls.append(stream["server"])
if stream["server"] == "StreamHG":
raise RuntimeError("HTTP Error 502: Bad Gateway")
return 0
argv = [
"provider_downloader.py",
"--provider",
"anikoto",
"--show-id",
"anikoto:show-1",
"--title",
"Retry Exception Show",
"--episodes",
"1",
"--mode",
"dub",
"--quality",
"best",
"--output-dir",
"/tmp/kaizoku-provider-test",
]
with mock.patch.object(provider_downloader, "bridge", side_effect=fake_bridge), mock.patch.object(
provider_downloader, "download_episode", side_effect=fake_download
), mock.patch.object(provider_downloader, "download_subtitles", return_value=[]), mock.patch.object(
provider_downloader.sys, "argv", argv
):
with self.assertRaises(SystemExit) as raised:
provider_downloader.main()
self.assertEqual(raised.exception.code, 0)
self.assertEqual(calls, ["StreamHG", "Earnvids"])
def test_provider_bridge_resolve_does_not_fallback_from_dub_to_sub(self):
bridge_js = (ROOT / "providers" / "bridge.js").read_text(encoding="utf-8")