video enrichment: fix DeArrow retry (was a silent no-op)

enrichment_retry handled ryd/sponsorblock + the keyed backfills, but DeArrow (also a
youtube_video_stats backfill, keyed on dearrow_status) fell through to nothing — so the
modal's Retry button did nothing for DeArrow. Fold dearrow into the youtube_video_stats
retry branch. Regression test re-queues failed dearrow rows, leaves matched ones.
This commit is contained in:
BoulderBadgeDad 2026-06-20 12:52:06 -07:00
parent 0eac0ea46e
commit 8349fa78dd
2 changed files with 21 additions and 3 deletions

View file

@ -1096,9 +1096,9 @@ class VideoDatabase:
return cur.rowcount
finally:
conn.close()
if service in ("ryd", "sponsorblock"):
col = "ryd_status" if service == "ryd" else "sb_status"
att = "ryd_attempted" if service == "ryd" else "sb_attempted"
if service in ("ryd", "sponsorblock", "dearrow"):
col = {"ryd": "ryd_status", "sponsorblock": "sb_status", "dearrow": "dearrow_status"}[service]
att = {"ryd": "ryd_attempted", "sponsorblock": "sb_attempted", "dearrow": "dearrow_attempted"}[service]
conn = self._get_connection()
try:
if scope == "item" and item_id is not None:

View file

@ -81,3 +81,21 @@ def test_proxy_instances_setting_parsing(db):
assert ("invidious", "https://invidious.b.test") in got # kind inferred + trailing / stripped
assert ("piped", "https://c.test") in got
assert all(u.startswith("http") for _, u in got) # 'junk' dropped
def test_dearrow_retry_requeues_failed_youtube_videos(db):
# Regression: enrichment_retry only handled ryd/sponsorblock, so DeArrow's
# Retry button was a silent no-op. It must re-queue failed dearrow rows.
conn = db._get_connection()
conn.execute("INSERT INTO youtube_video_stats (youtube_id, dearrow_status) VALUES ('a', 'not_found')")
conn.execute("INSERT INTO youtube_video_stats (youtube_id, dearrow_status) VALUES ('b', 'error')")
conn.execute("INSERT INTO youtube_video_stats (youtube_id, dearrow_status) VALUES ('c', 'ok')")
conn.commit(); conn.close()
n = db.enrichment_retry("dearrow", "video", scope="failed")
assert n == 2 # the not_found + error rows
conn = db._get_connection()
rows = dict(conn.execute("SELECT youtube_id, dearrow_status FROM youtube_video_stats").fetchall())
conn.close()
assert rows["a"] is None and rows["b"] is None # re-queued
assert rows["c"] == "ok" # matched left untouched