1
1
from datetime import datetime
2
+ from django .utils .timezone import make_aware
2
3
3
4
from dateutil .relativedelta import relativedelta
4
5
from dateutil .rrule import rrulestr
5
6
from rest_framework import status , viewsets
6
- from rest_framework .decorators import detail_route
7
+ from rest_framework .decorators import detail_route , list_route
7
8
from rest_framework .response import Response
8
9
from rest_framework .views import APIView
9
10
@@ -49,19 +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 )
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 ) )
61
62
event = Event (name = series .name , description = series .description , start = start , end = end , room = series .room , series = series )
62
63
events .append (event )
63
64
return events
64
-
65
+
65
66
@detail_route (methods = ['post' ])
66
67
def attend (self , request , pk ):
67
68
event = self .get_object ()
@@ -83,6 +84,13 @@ def perform_destroy(self, instance):
83
84
instance .deleted = True
84
85
instance .save (update_fields = ['deleted' ])
85
86
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
+
86
94
87
95
class OwnUser (APIView ):
88
96
def get (self , request ):
0 commit comments