video enrichment: persist worker pause state across restart
Pause/resume now write <service>_paused to video_settings, and the engine restores each worker's saved pause when it's (re)built — mirrors music's <service>_enrichment_paused boot flag. Isolated to video.db; music untouched.
This commit is contained in:
parent
68a65a8e3d
commit
9d2468a50f
3 changed files with 42 additions and 0 deletions
|
|
@ -25,6 +25,9 @@ class VideoEnrichmentEngine:
|
|||
service: VideoEnrichmentWorker(db, service, client, display_name=_DISPLAY.get(service))
|
||||
for service, client in clients.items()
|
||||
}
|
||||
# Restore each worker's persisted pause state (survives restart).
|
||||
for w in self.workers.values():
|
||||
w.restore_paused()
|
||||
|
||||
def start_all(self):
|
||||
for w in self.workers.values():
|
||||
|
|
|
|||
|
|
@ -52,9 +52,24 @@ class VideoEnrichmentWorker:
|
|||
|
||||
def pause(self):
|
||||
self.paused = True
|
||||
self._persist_paused()
|
||||
|
||||
def resume(self):
|
||||
self.paused = False
|
||||
self._persist_paused()
|
||||
|
||||
def _persist_paused(self):
|
||||
# Survives restart, like music's <service>_enrichment_paused config flag.
|
||||
try:
|
||||
self.db.set_setting(self.service + "_paused", "1" if self.paused else "0")
|
||||
except Exception:
|
||||
logger.exception("video enrichment: could not persist pause for %s", self.service)
|
||||
|
||||
def restore_paused(self):
|
||||
try:
|
||||
self.paused = str(self.db.get_setting(self.service + "_paused") or "") == "1"
|
||||
except Exception:
|
||||
logger.exception("video enrichment: could not restore pause for %s", self.service)
|
||||
|
||||
@property
|
||||
def enabled(self):
|
||||
|
|
|
|||
|
|
@ -96,6 +96,30 @@ def test_engine_builds_and_lists_workers(db):
|
|||
assert eng.worker("tmdb") is not None and eng.worker("nope") is None
|
||||
|
||||
|
||||
def test_pause_persists_to_db_and_resume_clears_it(db):
|
||||
w = VideoEnrichmentWorker(db, "tmdb", FakeClient(None))
|
||||
w.pause()
|
||||
assert db.get_setting("tmdb_paused") == "1"
|
||||
w.resume()
|
||||
assert db.get_setting("tmdb_paused") == "0"
|
||||
|
||||
|
||||
def test_paused_state_survives_a_fresh_worker(db):
|
||||
VideoEnrichmentWorker(db, "tmdb", FakeClient(None)).pause()
|
||||
# A brand-new worker (as if after restart) restores the saved pause.
|
||||
fresh = VideoEnrichmentWorker(db, "tmdb", FakeClient(None))
|
||||
assert fresh.paused is False # not restored until asked
|
||||
fresh.restore_paused()
|
||||
assert fresh.paused is True
|
||||
|
||||
|
||||
def test_engine_restores_paused_workers_on_build(db):
|
||||
db.set_setting("tvdb_paused", "1") # tvdb was paused before "restart"
|
||||
eng = VideoEnrichmentEngine(db, {"tmdb": FakeClient(None), "tvdb": FakeClient(None)})
|
||||
assert eng.worker("tvdb").paused is True
|
||||
assert eng.worker("tmdb").paused is False
|
||||
|
||||
|
||||
def test_enrichment_package_imports_nothing_from_music():
|
||||
base = Path(__file__).resolve().parent.parent / "core" / "video" / "enrichment"
|
||||
for py in base.glob("*.py"):
|
||||
|
|
|
|||
Loading…
Reference in a new issue