From 78066b77aee1081fb2b7709b63e7a640844979bd Mon Sep 17 00:00:00 2001 From: Niklas Meinzer Date: Tue, 2 Dec 2025 21:54:59 +0100 Subject: [PATCH] fix(grist): Don't send request to grist of nothing is written --- src/meal_manager/grist.py | 12 ++++++++++-- src/meal_manager/main.py | 9 ++++++--- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/meal_manager/grist.py b/src/meal_manager/grist.py index c90885f..2e3a262 100644 --- a/src/meal_manager/grist.py +++ b/src/meal_manager/grist.py @@ -14,7 +14,11 @@ config = { } -def sync_with_grist(event): +def sync_with_grist(event) -> int: + """Writes the event's registrations to Grist. + If a registration already exists for a given household, it is not overwritten. + Returns the number of new records. + """ grist = GristApi(config=config) status_code, grist_response = grist.list_records( @@ -53,4 +57,8 @@ def sync_with_grist(event): "meal_manager_event_id": event.id, } ) - grist.add_records("Transactions", new_records) + if new_records: + grist.add_records("Transactions", new_records) + return len(new_records) + else: + return 0 diff --git a/src/meal_manager/main.py b/src/meal_manager/main.py index e725dd8..b93a90d 100644 --- a/src/meal_manager/main.py +++ b/src/meal_manager/main.py @@ -4,6 +4,7 @@ from contextlib import asynccontextmanager from datetime import datetime, timedelta from functools import partial from typing import Annotated +from urllib.parse import quote_plus import starlette.status as status from fastapi import Depends, FastAPI, HTTPException, Request, Response @@ -446,9 +447,11 @@ def sync_with_grist_route(event_id: int, session: SessionDep, user: StrictUserDe statement = select(Event).where(Event.id == event_id) event = session.scalars(statement).one() - sync_with_grist(event) - + entries_written = sync_with_grist(event) + message = "Es wurden keine Einträge geschrieben." + if entries_written > 0: + message = f"Erfolgreich {entries_written} Einträge geschrieben." return RedirectResponse( - url=f"/event/{event_id}?message=Erfolgreich%20an%20Abrechnung%20%C3%BCbertragen", + url=f"/event/{event_id}?message={quote_plus(message)}", status_code=status.HTTP_302_FOUND, )