diff --git a/program/models.py b/program/models.py index c66c3963be68046c3f62e94ecf526ba2d473e1e1..a53169f7fa4f3874b9dc94a232d7155984103bf1 100644 --- a/program/models.py +++ b/program/models.py @@ -430,12 +430,12 @@ class Schedule(models.Model): byweekday_start = int(schedule.byweekday) if schedule.rrule.freq == 0: - starts.append(datetime.combine(schedule.dstart, schedule.tstart)) - ends.append(datetime.combine(dend, schedule.tend)) + starts.append(timezone.make_aware(datetime.combine(schedule.dstart, schedule.tstart))) + ends.append(timezone.make_aware(datetime.combine(dend, schedule.tend))) else: starts = list(rrule(freq=schedule.rrule.freq, - dtstart=datetime.combine(schedule.dstart, schedule.tstart), + dtstart=timezone.make_aware(datetime.combine(schedule.dstart, schedule.tstart)), interval=schedule.rrule.interval, until=schedule.until + relativedelta(days=+1), bysetpos=schedule.rrule.bysetpos, @@ -443,7 +443,7 @@ class Schedule(models.Model): byweekno=byweekno)) ends = list(rrule(freq=schedule.rrule.freq, - dtstart=datetime.combine(dend, schedule.tend), + dtstart=timezone.make_aware(datetime.combine(dend, schedule.tend)), interval=schedule.rrule.interval, until=schedule.until + relativedelta(days=+1), bysetpos=schedule.rrule.bysetpos, @@ -457,7 +457,7 @@ class Schedule(models.Model): # produces wrong end dates if the 1st Tuesday is before the 1st Monday # In this case we take the next day instead of rrule's calculated end if starts[k] > ends[k]: - ends[k] = datetime.combine(starts[k] + relativedelta(days=+1), schedule.tend) + ends[k] = timezone.make_aware(datetime.combine(starts[k] + relativedelta(days=+1), schedule.tend)) ''' Add a number of days to the generated dates? diff --git a/program/views.py b/program/views.py index 0226ad5ac0960dd1782ca21d13460c65c5d0a635..705209007c28f4dddf0f83845b3282572d1078c4 100644 --- a/program/views.py +++ b/program/views.py @@ -26,6 +26,7 @@ from django.contrib.auth.models import User from django.db.models import Q from django.http import HttpResponse from django.shortcuts import get_object_or_404 +from django.utils import timezone from django.utils.translation import gettext as _ from rest_framework import permissions, status, viewsets from rest_framework.pagination import LimitOffsetPagination @@ -41,9 +42,9 @@ logger = logging.getLogger(__name__) def json_day_schedule(request, year=None, month=None, day=None): if year is None and month is None and day is None: - today = datetime.combine(date.today(), time(0, 0)) + today = timezone.make_aware(datetime.combine(date.today(), time(0, 0))) else: - today = datetime.strptime('%s__%s__%s__00__00' % (year, month, day), '%Y__%m__%d__%H__%M') + today = timezone.make_aware(datetime.strptime('%s__%s__%s__00__00' % (year, month, day), '%Y__%m__%d__%H__%M')) timeslots = TimeSlot.objects.get_24h_timeslots(today).select_related('schedule').select_related('show') schedule = [] @@ -74,16 +75,16 @@ def json_playout(request): """ if request.GET.get('start') is None: - start = datetime.combine(date.today(), time(0, 0)) + start = timezone.make_aware(datetime.combine(date.today(), time(0, 0))) else: - start = datetime.combine(datetime.strptime(request.GET.get('start'), '%Y-%m-%d').date(), time(0, 0)) + start = timezone.make_aware(datetime.combine(datetime.strptime(request.GET.get('start'), '%Y-%m-%d').date(), time(0, 0))) 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') else: # Otherwise return the given timerange - end = datetime.combine(datetime.strptime(request.GET.get('end'), '%Y-%m-%d').date(), time(23, 59)) + end = timezone.make_aware(datetime.combine(datetime.strptime(request.GET.get('end'), '%Y-%m-%d').date(), time(23, 59))) timeslots = TimeSlot.objects.get_timerange_timeslots(start, end).select_related('schedule').select_related('show') schedule = [] @@ -538,12 +539,12 @@ class APITimeSlotViewSet(viewsets.ModelViewSet): # Filters # Return next 60 days by default - start = datetime.combine(date.today(), time(0, 0)) + start = timezone.make_aware(datetime.combine(date.today(), time(0, 0))) end = start + timedelta(days=60) if ('start' in self.request.query_params) and ('end' in self.request.query_params): - start = datetime.combine(datetime.strptime(self.request.query_params.get('start'), '%Y-%m-%d').date(), time(0, 0)) - end = datetime.combine(datetime.strptime(self.request.query_params.get('end'), '%Y-%m-%d').date(), time(23, 59)) + start = timezone.make_aware(datetime.combine(datetime.strptime(self.request.query_params.get('start'), '%Y-%m-%d').date(), time(0, 0))) + end = timezone.make_aware(datetime.combine(datetime.strptime(self.request.query_params.get('end'), '%Y-%m-%d').date(), time(23, 59))) default_order = '-start' order = self.request.query_params.get('order', default_order) @@ -556,7 +557,7 @@ class APITimeSlotViewSet(viewsets.ModelViewSet): if 'surrounding' in self.request.query_params: - today = datetime.today() + today = timezone.make_aware(datetime.today()) nearest_timeslots_in_future = TimeSlot.objects.filter(start__gte=today).order_by('start').values_list('id', flat=True)[:5] nearest_timeslots_in_past = TimeSlot.objects.filter(start__lt=today).order_by('-start').values_list('id', flat=True)[:5]