From 8cd4961e74b13fbfd4cb17e3046d31edd71918af Mon Sep 17 00:00:00 2001 From: Leander Furumo Date: Fri, 23 Oct 2026 21:49:25 +0200 Subject: [PATCH] return None instead of raising when a galtinn request fails Co-Authored-By: Claude Opus 5.5 --- bot/src/cogs/galtinn.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/bot/src/cogs/galtinn.py b/bot/src/cogs/galtinn.py index 9ca4f77..13a06cc 100644 --- a/bot/src/cogs/galtinn.py +++ b/bot/src/cogs/galtinn.py @@ -19,6 +19,7 @@ from models import DiscordProfiles from models import DuskenUser from models import Groups from models import Users +from pydantic import ValidationError ResponseModel = TypeVar("ResponseModel", bound=BasicResponse) @@ -220,11 +221,16 @@ class Galtinn(commands.Cog): url = f"{self.bot.galtinn['api_url']}/{endpoint}/?{urllib.parse.urlencode(params | {'format': 'json'})}" result = None while url: - async with self.session.get(url) as r: - if r.status != 200: - self.bot.logger.warning(f"Failed to fetch {url} from Galtinn. Status: {r.status}") - return result - page = model(**await r.json()) + # Errors are logged and returned as a failed page, so callers only have to handle None + try: + async with self.session.get(url) as r: + if r.status != 200: + self.bot.logger.warning(f"Failed to fetch {url} from Galtinn. Status: {r.status}") + return result + page = model(**await r.json()) + except (aiohttp.ClientError, asyncio.TimeoutError, ValidationError) as e: + self.bot.logger.warning(f"Failed to fetch {url} from Galtinn. {e!r}") + return result if result is None: result = page