From e82c6edea20308dfdb495b73f332dcad1a02a66c Mon Sep 17 00:00:00 2001
From: Jorrit Schaap <schaap@astron.nl>
Date: Thu, 31 Aug 2023 08:24:55 +0200
Subject: [PATCH] catch parsing errors

---
 SAS/TMSS/backend/src/tmss/tmssapp/views.py | 49 +++++++++++-----------
 1 file changed, 25 insertions(+), 24 deletions(-)

diff --git a/SAS/TMSS/backend/src/tmss/tmssapp/views.py b/SAS/TMSS/backend/src/tmss/tmssapp/views.py
index 94c96a424f0..02059accc2a 100644
--- a/SAS/TMSS/backend/src/tmss/tmssapp/views.py
+++ b/SAS/TMSS/backend/src/tmss/tmssapp/views.py
@@ -3,7 +3,7 @@ import sys
 import logging
 logger = logging.getLogger(__name__)
 
-from django.http import HttpResponse, JsonResponse, Http404, FileResponse, HttpResponseNotFound
+from django.http import HttpResponse, JsonResponse, Http404, FileResponse, HttpResponseNotFound, HttpResponseServerError
 from rest_framework.response import Response as RestResponse
 from rest_framework import status
 from django.shortcuts import get_object_or_404, render
@@ -20,7 +20,6 @@ from rest_framework.decorators import authentication_classes, permission_classes
 from django.apps import apps
 import re
 from lofar.sas.tmss.tmss.tmssapp.serializers import SchedulingUnitDraftSerializer, SchedulingUnitBlueprintSerializer
-
 from rest_framework.decorators import api_view, renderer_classes
 from lofar.sas.tmss.tmss.tmssapp.renderers.ImagePNGRenderer import ImagePNGRenderer
 from datetime import datetime, date, time, timedelta
@@ -224,28 +223,30 @@ def utc(request):
                                         ])
 @api_view(['GET'])
 def lst(request):
-    # Handling optional parameters via django paths in urls.py is a pain, we access them on the request directly instead.
-    timestamp = request.GET.get('timestamp', None)
-    station = request.GET.get('station', None)
-    longitude = request.GET.get('longitude', None)
-
-    # conversions
-    if timestamp:
-        timestamp = dateutil.parser.parse(timestamp)  #  isot to datetime
-    if longitude:
-        longitude = float(longitude)
-
-    if station:
-        lst_lon = local_sidereal_time_for_utc_and_station(timestamp, station)
-    elif longitude:
-        lst_lon = local_sidereal_time_for_utc_and_longitude(timestamp, longitude)
-    else:
-        # fall back to defaults
-        lst_lon = local_sidereal_time_for_utc_and_station(timestamp)
-
-    # todo: do we want to return a dict, so users can make sure their parameters were parsed correctly instead?
-    return HttpResponse(str(lst_lon), content_type='text/plain')
-
+    try:
+        # Handling optional parameters via django paths in urls.py is a pain, we access them on the request directly instead.
+        timestamp = request.GET.get('timestamp', None)
+        station = request.GET.get('station', None)
+        longitude = request.GET.get('longitude', None)
+
+        # conversions
+        if timestamp:
+            timestamp = dateutil.parser.parse(timestamp)  #  iso to datetime
+        if longitude:
+            longitude = float(longitude)
+
+        if station:
+            lst_lon = local_sidereal_time_for_utc_and_station(timestamp, station)
+        elif longitude:
+            lst_lon = local_sidereal_time_for_utc_and_longitude(timestamp, longitude)
+        else:
+            # fall back to defaults
+            lst_lon = local_sidereal_time_for_utc_and_station(timestamp)
+
+        # todo: do we want to return a dict, so users can make sure their parameters were parsed correctly instead?
+        return HttpResponse(str(lst_lon), content_type='text/plain')
+    except Exception as e:
+        return HttpResponseServerError(str(e), content_type='text/plain')
 
 @permission_classes([AllowAny])
 @authentication_classes([AllowAny])
-- 
GitLab