From 8846a4f1dfb9345795098eed5801ecc6703e9607 Mon Sep 17 00:00:00 2001 From: Holden Date: Tue, 16 Jun 2026 16:19:54 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20address=203=20post-fix=20audit=20finding?= =?UTF-8?q?s=20=E2=80=94=20begin=5Fbatch=20flush=20guard,=20misleading=20d?= =?UTF-8?q?ebug=20log,=20shared=20asset=5Fid=20score=20deletion?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- winnow/upload_tracker.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/winnow/upload_tracker.py b/winnow/upload_tracker.py index 8994ab1..4a0dbea 100644 --- a/winnow/upload_tracker.py +++ b/winnow/upload_tracker.py @@ -104,7 +104,10 @@ def begin_batch(filename: str) -> None: path = _tracker_path(filename) key = str(path) if key in _deferred and key in _cache: - _write_to_disk(path, _cache[key]) + try: + _write_to_disk(path, _cache[key]) + except Exception: + logger.warning("begin_batch: could not flush leftover deferred state for %s — partial progress may be lost", path) _deferred.discard(key) _deferred.add(key) @@ -168,6 +171,7 @@ def _mark( entry["frigate_scores"][asset_id] = round(frigate_score, 4) by_person[person_name] = entry _save(filename, data) + logger.debug("Marked %s in %s (%s)", asset_id, filename, person_name) # ── Public API ──────────────────────────────────────────────────────────────── @@ -198,12 +202,10 @@ def mark_uploaded( frigate_score: float | None = None, ) -> None: _mark(UPLOAD_TRACKER_FILE, asset_id, person_name, score=score, crop_dims=crop_dims, frigate_score=frigate_score) - logger.debug(f"Marked {asset_id} as uploaded ({person_name})") def mark_rejected(asset_id: str, person_name: str | None = None) -> None: _mark(REJECT_TRACKER_FILE, asset_id, person_name) - logger.debug(f"Marked {asset_id} as rejected ({person_name})") @@ -245,7 +247,7 @@ def remove_frigate_files_batch(person_name: str, frigate_filenames: list[str]) - entry = _migrate_entry(raw) for fn in frigate_filenames: asset_id = entry["frigate_files"].pop(fn, None) - if asset_id is not None: + if asset_id is not None and asset_id not in entry["frigate_files"].values(): entry["frigate_scores"].pop(asset_id, None) by_person[person_name] = entry _save(UPLOAD_TRACKER_FILE, data)