Skip to content
Snippets Groups Projects
Commit 61543621 authored by Ernesto Rico Schmidt's avatar Ernesto Rico Schmidt
Browse files

Cleanup in views and TimeslotManager methods

- remove remaining usage of naive datetime objects
- refactor json_day_schedule and json_playout views
- remove unused methods in TimeslotManager
parent 83bfb3b0
No related branches found
No related tags found
No related merge requests found
......@@ -1062,24 +1062,8 @@ class TimeSlotManager(models.Manager):
)
@staticmethod
def get_24h_timeslots(start):
end = timezone.make_aware(start + timedelta(hours=24))
return TimeSlot.objects.filter(
Q(start__lte=start, end__gte=start) | Q(start__gt=start, start__lt=end)
).exclude(end=start)
@staticmethod
def get_7d_timeslots(start):
start = datetime.combine(start, time(0, 0))
end = timezone.make_aware(start + timedelta(days=7))
return TimeSlot.objects.filter(
Q(start__lte=start, end__gte=start) | Q(start__gt=start, start__lt=end)
).exclude(end=start)
@staticmethod
def get_timerange_timeslots(start, end):
def get_timerange_timeslots(start: datetime, end: datetime):
"""get the timeslots in the timerange between start and end"""
return TimeSlot.objects.filter(
Q(start__lte=start, end__gte=start) | Q(start__gt=start, start__lt=end)
).exclude(end=start)
......
......@@ -20,7 +20,7 @@
import json
import logging
from datetime import date, datetime, time
from datetime import date, datetime, time, timedelta
from textwrap import dedent
from drf_spectacular.utils import OpenApiResponse, extend_schema, extend_schema_view
......@@ -78,15 +78,21 @@ logger = logging.getLogger(__name__)
def json_day_schedule(request, year=None, month=None, day=None):
# datetime.combine returns a timezone naive datetime object
if year is None and month is None and day is None:
today = timezone.make_aware(datetime.combine(timezone.now(), time(0, 0)))
start = timezone.make_aware(datetime.combine(timezone.now(), time(0, 0)))
else:
today = timezone.make_aware(datetime.combine(date(year, month, day), time(0, 0)))
start = timezone.make_aware(datetime.combine(date(year, month, day), time(0, 0)))
end = start + timedelta(hours=24)
timeslots = (
TimeSlot.objects.get_24h_timeslots(today).select_related("schedule").select_related("show")
TimeSlot.objects.get_timerange_timeslots(start, end)
.select_related("schedule")
.select_related("show")
)
schedule = []
for ts in timeslots:
entry = {
"start": ts.start.strftime("%Y-%m-%d_%H:%M:%S"),
......@@ -115,6 +121,7 @@ def json_playout(request):
If end not given, it returns all timeslots of the next 7 days
"""
# datetime.combine returns a timezone naive datetime object
if request.GET.get("start") is None:
start = timezone.make_aware(datetime.combine(timezone.now(), time(0, 0)))
else:
......@@ -123,24 +130,20 @@ def json_playout(request):
)
if request.GET.get("end") is None:
# If no end was given, return the next week
timeslots = (
TimeSlot.objects.get_7d_timeslots(start)
.select_related("schedule")
.select_related("show")
)
end = start + timedelta(days=7)
else:
# Otherwise return the given timerange
end = timezone.make_aware(
datetime.combine(parse_date(request.GET.get("end")), time(23, 59))
)
timeslots = (
TimeSlot.objects.get_timerange_timeslots(start, end)
.select_related("schedule")
.select_related("show")
)
timeslots = (
TimeSlot.objects.get_timerange_timeslots(start, end)
.select_related("schedule")
.select_related("show")
)
schedule = []
for ts in timeslots:
is_repetition = " " + _("REP") if ts.schedule.is_repetition is True else ""
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment