Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added event JSON API #5

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions apps/events/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
from apps.events.views import EventDetail, ApplyToEvent, confirm_event, \
FillInTransport, UpdateTransport, ChangeDescription, ChangeDetails, EventImages, \
AddEvents, DeleteApplication, EditApplication, IncomingApplications, CreateEvent, \
Participations, InternationalEvents, ExportApplications, ExportParticipants, \
ExportFeedback, InternationalProjects
Participations, InternationalEvents, JsonInternationalEvents, ExportApplications, \
ExportParticipants, ExportFeedback, InternationalProjects
from apps.feedback.views import NewQuestionset, AnswerFeedback, FillOutQuestionaire


Expand All @@ -14,6 +14,7 @@
urlpatterns = patterns(
'',
url(r'^/?$', InternationalEvents.as_view(), name='events'),
url(r'^/list_json?$', JsonInternationalEvents().json_view, name='events_list_json'),
url(r'^/projects/?$', InternationalProjects.as_view(), name='projects'),
url(r'^/questionaire/create/?$', NewQuestionset.as_view(), name='newquestionset'),
url(r'^/add_batch/?$', AddEvents.as_view(), name='batch_add_events'),
Expand Down
48 changes: 34 additions & 14 deletions apps/events/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,14 @@
import logging

from django.contrib import messages
from django.core import serializers
from django.core.exceptions import PermissionDenied
from django.core.files import File
from django.core.urlresolvers import reverse, reverse_lazy
from django.forms import widgets
from django.forms.models import modelform_factory
from django.http import HttpResponse
from django.http import JsonResponse
from django.shortcuts import redirect, get_object_or_404
from django.utils import timezone
from django.views.generic import ListView, DetailView, CreateView, UpdateView, \
Expand Down Expand Up @@ -141,34 +143,52 @@ def adminoptions(self):
return options

def grids(self):
e = self.get_events()
return [
("events/grids/base.html", self.get_events()['active_list'],
"Events Open for Application"),
("events/grids/base.html", self.get_events()['pending_list'],
"Events in Progress"),
("events/grids/base.html", self.get_events()['over_list'], "Past Events"),
("events/grids/base.html", e['active_list'], "Events Open for Application"),
("events/grids/base.html", e['pending_list'], "Events in Progress"),
("events/grids/base.html", e['over_list'], "Past Events")
]

def get_events(self):
events = self.get_queryset().filter(scope="international").exclude(category="project")
eventlist = {}
eventlist['active_list'] = []
eventlist['pending_list'] = []
eventlist['over_list'] = []
eventlist = {
'active_list': [],
'pending_list': [],
'over_list': [],
}
for event in events:
if event.deadline and event.deadline > timezone.now():
eventlist['active_list'].append(event)
if event.deadline and event.end_date and event.deadline < timezone.now() \
and event.end_date > \
timezone.now().date():
and event.end_date > timezone.now().date():
eventlist['pending_list'].append(event)
if event.deadline and event.end_date and event.end_date < timezone.now(

).date():
if event.deadline and event.end_date and event.end_date < timezone.now().date():
eventlist['over_list'].append(event)
return eventlist


class JsonInternationalEvents(InternationalEvents):
def to_json(self, event):
# serializer.serialize('python', [event]) does some stuff otherwise
# done manually here, but this is more readable
d = {k: getattr(event, k) for k in ['category', 'description', 'slug', 'start_date',
'end_date', 'deadline', 'location', 'scope']}
d['thumbnail'] = event.thumbnail.url
d['organizing_committee'] = event.organizing_committee.get().name
d['organizers'] = [o.get_full_name() for o in event.organizers.all()]
return d

def json_view(self, request):
"""
Returns a JSON dict based on the result of get_events. This can be used by
other commitments' websites to show info about events on their own websites.
"""
data = {k: [self.to_json(e) for e in events]
for k, events in self.get_events().items()}
return JsonResponse(data)


class InternationalProjects(InternationalEvents):
def grids(self):
return [
Expand Down
2 changes: 2 additions & 0 deletions manage.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
#!/usr/bin/env python
import os
import sys
import uuid
uuid._uuid_generate_random = None

if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "eestecnet.settings.development")
Expand Down