Skip to content

Commit ee0e508

Browse files
committed
Add API endpoint for future events. fixes #21
1 parent 92aa57d commit ee0e508

File tree

2 files changed

+21
-7
lines changed

2 files changed

+21
-7
lines changed

server/eventomat/event/views.py

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
from dateutil.relativedelta import relativedelta
44
from dateutil.rrule import rrulestr
5+
from django.utils.timezone import make_aware
56
from rest_framework import status, viewsets
67
from rest_framework.decorators import detail_route
78
from 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+
87100
class OwnUser(APIView):
88101
def get(self, request):
89102
serializer = OwnUserSerialiser(request.user)

server/eventomat/urls.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
router = routers.DefaultRouter()
2424
router.register(r'events', views.EventViewSet)
25+
router.register(r'future_events', views.FutureEventViewSet)
2526
router.register(r'series', views.SeriesViewSet)
2627
router.register(r'rooms', views.RoomViewSet)
2728

0 commit comments

Comments
 (0)