diff --git a/apps/events/urls.py b/apps/events/urls.py index 16369319..435d073e 100644 --- a/apps/events/urls.py +++ b/apps/events/urls.py @@ -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 @@ -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'), diff --git a/apps/events/views.py b/apps/events/views.py index 9eae9d96..fc2a6eb8 100644 --- a/apps/events/views.py +++ b/apps/events/views.py @@ -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, \ @@ -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 [ diff --git a/manage.py b/manage.py index dcf89f2c..db1d66f4 100644 --- a/manage.py +++ b/manage.py @@ -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")