mirror of
https://git.hiabuto.net/C3MA/CCMA.git
synced 2026-07-01 11:14:52 +02:00
fix: tolerate damaged contribution files
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user