initial commit
This commit is contained in:
37
src/archipelago_tester/pipeline/update/download_reporter.py
Normal file
37
src/archipelago_tester/pipeline/update/download_reporter.py
Normal file
@@ -0,0 +1,37 @@
|
||||
"""The download stage's progress line."""
|
||||
|
||||
import os
|
||||
|
||||
from archipelago_tester.core.display.progress import Progress
|
||||
|
||||
|
||||
class DownloadReporter:
|
||||
"""One line per game, saying what its apworld did.
|
||||
|
||||
The download run calls back serialized, so this needs no lock of its
|
||||
own. What each game's last asset did is remembered so the line can
|
||||
still name it once the game itself finishes.
|
||||
"""
|
||||
|
||||
#: What each download status means, in words.
|
||||
STATUS_LABELS = {
|
||||
"missing": "downloaded (new)",
|
||||
"stale": "downloaded (updated)",
|
||||
"verified": "already present (verified up to date)",
|
||||
"assumed": "already present (not verified)",
|
||||
}
|
||||
|
||||
def __init__(self, config, total):
|
||||
self.bar = Progress(total, config=config,
|
||||
labels={"ok": "ok", "none": "none"})
|
||||
self.last_asset = {}
|
||||
|
||||
def on_asset(self, game_name, path, status):
|
||||
label = self.STATUS_LABELS.get(status, status)
|
||||
self.last_asset[game_name] = f"{label} {os.path.basename(path)}"
|
||||
|
||||
def on_game(self, index, total, game_name, downloaded):
|
||||
detail = self.last_asset.pop(game_name, "no apworld")
|
||||
self.bar.update(
|
||||
index, "ok" if downloaded else "none", game_name,
|
||||
fallback_line=f"[{index}/{total}] {game_name}: {detail}")
|
||||
Reference in New Issue
Block a user