2
2
3
3
from dateutil .relativedelta import relativedelta
4
4
from dateutil .rrule import rrulestr
5
+ from django .utils .timezone import make_aware
5
6
from rest_framework import status , viewsets
6
7
from rest_framework .decorators import detail_route
7
8
from rest_framework .response import Response
@@ -49,16 +50,19 @@ def get_queryset(self):
49
50
if self .action != 'list' :
50
51
return events
51
52
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 :
54
55
if not series .rrule :
55
56
continue
56
57
year_from_now = datetime .now () + relativedelta (years = 1 )
57
58
rrule = rrulestr (series .rrule ).replace (until = year_from_now )
58
59
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 )
62
66
events .append (event )
63
67
return events
64
68
@@ -68,22 +72,31 @@ def attend(self, request, pk):
68
72
state = request .data .get ('state' , 'yes' )
69
73
if state not in ('yes' , 'no' , 'maybe' ):
70
74
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 ),
72
77
status = status .HTTP_400_BAD_REQUEST ,
73
78
)
74
79
if request .user .is_anonymous :
75
80
return Response (
76
81
'User must not be anonymous.' ,
77
82
status = status .HTTP_400_BAD_REQUEST ,
78
83
)
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 })
80
86
return Response (status = status .HTTP_200_OK )
81
87
82
88
def perform_destroy (self , instance ):
83
89
instance .deleted = True
84
90
instance .save (update_fields = ['deleted' ])
85
91
86
92
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
+
87
100
class OwnUser (APIView ):
88
101
def get (self , request ):
89
102
serializer = OwnUserSerialiser (request .user )
0 commit comments