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))
|
service: VideoEnrichmentWorker(db, service, client, display_name=_DISPLAY.get(service))
|
||||||
for service, client in clients.items()
|
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):
|
def start_all(self):
|
||||||
for w in self.workers.values():
|
for w in self.workers.values():
|
||||||
|
|
|
||||||
|
|
@ -52,9 +52,24 @@ class VideoEnrichmentWorker:
|
||||||
|
|
||||||
def pause(self):
|
def pause(self):
|
||||||
self.paused = True
|
self.paused = True
|
||||||
|
self._persist_paused()
|
||||||
|
|
||||||
def resume(self):
|
def resume(self):
|
||||||
self.paused = False
|
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
|
@property
|
||||||
def enabled(self):
|
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
|
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():
|
def test_enrichment_package_imports_nothing_from_music():
|
||||||
base = Path(__file__).resolve().parent.parent / "core" / "video" / "enrichment"
|
base = Path(__file__).resolve().parent.parent / "core" / "video" / "enrichment"
|
||||||
for py in base.glob("*.py"):
|
for py in base.glob("*.py"):
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue