fix: tolerate damaged contribution files

This commit is contained in:
Marcel Peterkau
2026-06-21 17:50:56 +02:00
parent 4bc1a8a200
commit 55bc3b666e
10 changed files with 87 additions and 4 deletions
+12 -1
View File
@@ -83,6 +83,7 @@ class MemberRepository:
accepted_at=member.accepted_at,
membership_started_at=member.membership_started_at,
)
self.get_contributions(member.member_id)
if member.member_id != member_dir.name:
errors.append(f"{member_dir.name}/member.json: member_id stimmt nicht mit Ordner überein")
normalized_number = member.member_number.casefold().strip()
@@ -92,6 +93,8 @@ class MemberRepository:
)
elif normalized_number:
seen_numbers[normalized_number] = member.member_id
except RepositoryError as exc:
errors.append(str(exc))
except (
OSError,
ValueError,
@@ -196,7 +199,15 @@ class MemberRepository:
path = self._member_path(member_id) / "contributions.json"
if not path.exists():
return ContributionData()
return ContributionData.from_dict(read_json(path))
try:
raw = read_json(path)
if not isinstance(raw, dict):
raise TypeError("Wurzelelement muss ein JSON-Objekt sein")
return ContributionData.from_dict(raw)
except (OSError, ValueError, TypeError, json.JSONDecodeError) as exc:
raise RepositoryError(
f"{member_id}/contributions.json konnte nicht gelesen werden: {exc}"
) from exc
def save_contributions(self, member_id: str, data: ContributionData) -> None:
self.get_member(member_id)