22
33from dateutil .relativedelta import relativedelta
44from dateutil .rrule import rrulestr
5+ from django .utils .timezone import make_aware
56from rest_framework import status , viewsets
67from rest_framework .decorators import detail_route
78from rest_framework .response import Response
@@ -49,16 +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 )
61- event = Event (name = series .name , description = series .description , start = start , end = end , room = series .room , series = series )
60+ start = make_aware (date .replace (
61+ hour = series .start .hour , minute = series .start .minute , second = 0 ))
62+ end = make_aware (date .replace (
63+ hour = series .end .hour , minute = series .end .minute , second = 0 ))
64+ event = Event (name = series .name , description = series .description ,
65+ start = start , end = end , room = series .room , series = series )
6266 events .append (event )
6367 return events
6468
@@ -68,22 +72,31 @@ def attend(self, request, pk):
6872 state = request .data .get ('state' , 'yes' )
6973 if state not in ('yes' , 'no' , 'maybe' ):
7074 return Response (
71- 'Status must be yes, no, or maybe, not {state}.' .format (state = state ),
75+ 'Status must be yes, no, or maybe, not {state}.' .format (
76+ state = state ),
7277 status = status .HTTP_400_BAD_REQUEST ,
7378 )
7479 if request .user .is_anonymous :
7580 return Response (
7681 'User must not be anonymous.' ,
7782 status = status .HTTP_400_BAD_REQUEST ,
7883 )
79- Attendance .objects .get_or_create (event = event , user = request .user , defaults = {'state' : state })
84+ Attendance .objects .get_or_create (
85+ event = event , user = request .user , defaults = {'state' : state })
8086 return Response (status = status .HTTP_200_OK )
8187
8288 def perform_destroy (self , instance ):
8389 instance .deleted = True
8490 instance .save (update_fields = ['deleted' ])
8591
8692
93+ class FutureEventViewSet (EventViewSet ):
94+ def get_queryset (self ):
95+ if self .action != 'list' :
96+ return EventViewSet .get_queryset (self ).filter (end__gte = datetime .now ())
97+ return [x for x in EventViewSet .get_queryset (self ) if x .end >= make_aware (datetime .now ())]
98+
99+
87100class OwnUser (APIView ):
88101 def get (self , request ):
89102 serializer = OwnUserSerialiser (request .user )
0 commit comments