From dfe9e9f1020749e394f7b0357788a235563929df Mon Sep 17 00:00:00 2001 From: Joe Banks Date: Thu, 15 Aug 2024 00:48:24 +0100 Subject: Harden GitHub metadata fetch on homepage --- pydis_site/apps/home/views.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/pydis_site/apps/home/views.py b/pydis_site/apps/home/views.py index 71f95293..0df84478 100644 --- a/pydis_site/apps/home/views.py +++ b/pydis_site/apps/home/views.py @@ -1,4 +1,5 @@ import logging +from json.decoder import JSONDecodeError import httpx from django.core.handlers.wsgi import WSGIRequest @@ -53,14 +54,24 @@ class HomeView(View): repo_dict = {} try: # Fetch the data from the GitHub API - api_data: list[dict] = httpx.get( + resp = httpx.get( self.github_api, headers=self.headers, timeout=settings.TIMEOUT_PERIOD - ).json() + ) + + resp.raise_for_status() + + api_data: list[dict] = resp.json() except httpx.TimeoutException: log.error("Request to fetch GitHub repository metadata for timed out!") return repo_dict + except httpx.HTTPStatusError as ex: + log.error(f"Received HTTP {ex.response.status_code} from GitHub repository metadata request!") + return repo_dict + except JSONDecodeError: + log.error("GitHub returned invalid JSON for repository metadata!") + return repo_dict # Process the API data into our dict for repo in api_data: -- cgit v1.2.3