11from datetime import datetime
2+ from django .utils .timezone import make_aware
23
34from dateutil .relativedelta import relativedelta
45from dateutil .rrule import rrulestr
56from rest_framework import status , viewsets
6- from rest_framework .decorators import detail_route
7+ from rest_framework .decorators import detail_route , list_route
78from rest_framework .response import Response
89from rest_framework .views import APIView
910
@@ -49,19 +50,19 @@ def get_queryset(self):
4950 if self .action != 'list' :
5051 return events
5152 events = list (events )
52- seriesList = Series .objects .all ()
53- for series in seriesList :
53+ series_list = Series .objects .all ()
54+ for series in series_list :
5455 if not series .rrule :
5556 continue
5657 year_from_now = datetime .now () + relativedelta (years = 1 )
5758 rrule = rrulestr (series .rrule ).replace (until = year_from_now )
5859 for date in rrule :
59- start = date .replace (hour = series .start .hour , minute = series .start .minute , second = 0 )
60- end = date .replace (hour = series .end .hour , minute = series .end .minute , second = 0 )
60+ start = make_aware ( date .replace (hour = series .start .hour , minute = series .start .minute , second = 0 ) )
61+ end = make_aware ( date .replace (hour = series .end .hour , minute = series .end .minute , second = 0 ) )
6162 event = Event (name = series .name , description = series .description , start = start , end = end , room = series .room , series = series )
6263 events .append (event )
6364 return events
64-
65+
6566 @detail_route (methods = ['post' ])
6667 def attend (self , request , pk ):
6768 event = self .get_object ()
@@ -83,6 +84,13 @@ def perform_destroy(self, instance):
8384 instance .deleted = True
8485 instance .save (update_fields = ['deleted' ])
8586
87+ class FutureEventViewSet (EventViewSet ):
88+ def get_queryset (self ):
89+ if self .action != 'list' :
90+ return EventViewSet .get_queryset (self ).filter (end__gte = datetime .now ())
91+ return [x for x in EventViewSet .get_queryset (self ) if x .end >= make_aware (datetime .now ())]
92+
93+
8694
8795class OwnUser (APIView ):
8896 def get (self , request ):
0 commit comments