From 82eee15d6a8632797ef03b703e7cf8ee711e4b79 Mon Sep 17 00:00:00 2001
From: Ernesto Rico Schmidt <ernesto@helsinki.at>
Date: Fri, 7 Apr 2023 21:19:52 -0400
Subject: [PATCH] Fix playout endpoint showing timeslots in wrong timezone

Wrong mix of timezone aware and timezone naive datetime objects

Close #116
---
 program/views.py | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/program/views.py b/program/views.py
index 00b4ca03..66804e34 100644
--- a/program/views.py
+++ b/program/views.py
@@ -89,8 +89,9 @@ def timeslot_entry(*, timeslot: TimeSlot) -> dict:
 
     return {
         "id": timeslot.id,
-        "start": timeslot.start.strftime("%Y-%m-%dT%H:%M:%S"),
-        "end": timeslot.end.strftime("%Y-%m-%dT%H:%M:%S"),
+        # we need start & end as timezone naive datetime objects
+        "start": timezone.make_naive(timeslot.start).strftime("%Y-%m-%dT%H:%M:%S"),
+        "end": timezone.make_naive(timeslot.end).strftime("%Y-%m-%dT%H:%M:%S"),
         "title": title,
         "schedule_id": schedule.id,
         "is_repetition": timeslot.is_repetition,
@@ -175,9 +176,9 @@ def json_playout(request):
     - internal calendar to retrieve all timeslots for a week
     """
 
-    # datetime.combine returns a timezone naive datetime object
+    # datetime.now and datetime.combine return timezone naive datetime objects
     if request.GET.get("start") is None:
-        schedule_start = timezone.make_aware(datetime.combine(timezone.now(), time(0, 0)))
+        schedule_start = timezone.make_aware(datetime.combine(datetime.now(), time(0, 0)))
     else:
         schedule_start = timezone.make_aware(
             datetime.combine(parse_date(request.GET.get("start")), time(0, 0))
@@ -187,8 +188,7 @@ def json_playout(request):
         schedule_end = schedule_start + timedelta(days=7)
     else:
         schedule_end = timezone.make_aware(
-            datetime.combine(parse_date(request.GET.get("end")) + timedelta(days=1), time(0, 0)),
-            timezone=timezone.get_current_timezone(),
+            datetime.combine(parse_date(request.GET.get("end")) + timedelta(days=1), time(0, 0))
         )
 
     include_virtual = request.GET.get("includeVirtual") == "true"
-- 
GitLab