diff --git a/log_parser.py b/log_parser.py index 484024a..99cc075 100644 --- a/log_parser.py +++ b/log_parser.py @@ -200,6 +200,10 @@ class LogParser: payload = data.get("payload") if s == "loading" and payload: + # Some transition messages only carry {"stage":"name"} with no + # progress info — skip them; the next message has the full payload. + if not all(k in payload for k in ("stages", "current", "value")): + return None loading = LoadingInfo( stages=payload["stages"], current=payload["current"], diff --git a/log_watcher.py b/log_watcher.py index fdf6282..c56931a 100644 --- a/log_watcher.py +++ b/log_watcher.py @@ -56,7 +56,10 @@ class LogWatcher: while True: line = f.readline() if line: - await self._on_line(line) + try: + await self._on_line(line) + except Exception: + pass # keep tailing even if a line causes a parser error else: await asyncio.sleep(self.POLL_INTERVAL) except OSError: @@ -96,7 +99,10 @@ class LogWatcher: line = f.readline() if line: pos = f.tell() - await self._on_line(line) + try: + await self._on_line(line) + except Exception: + pass # keep tailing even if a line causes a parser error else: break