fix: skip empty or unparseable athlete.json in merge_all

This commit is contained in:
Davide Scaini
2026-05-25 19:55:08 +02:00
parent 2f5251e9fe
commit 447d56a960
+4 -1
View File
@@ -326,7 +326,7 @@ def _merge_all_locked(data_dir: Path) -> int:
athlete_dest = merged_dir / "athlete.json" athlete_dest = merged_dir / "athlete.json"
if athlete_dest.exists() or athlete_dest.is_symlink(): if athlete_dest.exists() or athlete_dest.is_symlink():
athlete_dest.unlink() athlete_dest.unlink()
if athlete_src.exists(): if athlete_src.exists() and athlete_src.stat().st_size > 0:
athlete_edits_path = data_dir / "edits" / "athlete.yaml" athlete_edits_path = data_dir / "edits" / "athlete.yaml"
if athlete_edits_path.exists(): if athlete_edits_path.exists():
try: try:
@@ -338,9 +338,12 @@ def _merge_all_locked(data_dir: Path) -> int:
edits = {} edits = {}
_ATHLETE_EDITABLE = {"max_hr", "ftp_w", "hr_zones", "power_zones", "seasons", "gear"} _ATHLETE_EDITABLE = {"max_hr", "ftp_w", "hr_zones", "power_zones", "seasons", "gear"}
if edits: if edits:
try:
athlete_data = json.loads(athlete_src.read_text(encoding="utf-8")) athlete_data = json.loads(athlete_src.read_text(encoding="utf-8"))
athlete_data.update({k: v for k, v in edits.items() if k in _ATHLETE_EDITABLE}) athlete_data.update({k: v for k, v in edits.items() if k in _ATHLETE_EDITABLE})
athlete_dest.write_text(_dumps(athlete_data)) athlete_dest.write_text(_dumps(athlete_data))
except (json.JSONDecodeError, OSError):
pass
else: else:
athlete_dest.symlink_to(athlete_src.resolve()) athlete_dest.symlink_to(athlete_src.resolve())