diff --git a/slide2vec/progress.py b/slide2vec/progress.py index fa571bd..1b3b603 100644 --- a/slide2vec/progress.py +++ b/slide2vec/progress.py @@ -699,7 +699,10 @@ def read_tiling_progress_snapshot(process_list_path: str | Path, *, expected_tot path = Path(process_list_path) if not path.is_file(): return None - df = pd.read_csv(path) + try: + df = pd.read_csv(path) + except (pd.errors.EmptyDataError, pd.errors.ParserError): + return None if "tiling_status" not in df.columns: return None statuses = df["tiling_status"].fillna("tbp").astype(str) diff --git a/tests/test_progress.py b/tests/test_progress.py index b913380..a1a6aa9 100644 --- a/tests/test_progress.py +++ b/tests/test_progress.py @@ -555,6 +555,15 @@ def test_read_tiling_progress_snapshot_summarizes_process_list(tmp_path: Path): assert snapshot.discovered_tiles == 10 +def test_read_tiling_progress_snapshot_ignores_transient_empty_process_list(tmp_path: Path): + import slide2vec.progress as progress + + process_list_path = tmp_path / "process_list.csv" + process_list_path.write_text("", encoding="utf-8") + + assert progress.read_tiling_progress_snapshot(process_list_path, expected_total=3) is None + + def test_build_direct_embed_worker_request_payload_includes_progress_events_path(tmp_path: Path): import slide2vec.inference as inference