+ def get_events_by_timespan(self, request, year, month=None, day=None, extra_context=None):
+ context = extra_context or {}
+ context.update({
+ 'year': year,
+ 'month': month,
+ 'day': day
+ })
+ return self.get_timespan_queryset(year, month, day), context
+
+ def get_events_by_user(self, request, username, extra_context=None):
+ try:
+ user = User.objects.get(username)
+ except User.DoesNotExist:
+ raise Http404
+
+ qs = self.event_queryset().filter(owner=user)
+ context = extra_context or {}
+ context.update({
+ 'user': user
+ })
+ return qs, context
+
+ def get_events_by_tag(self, request, tag_slugs, extra_context=None):
+ tag_slugs = tag_slugs.replace('+', '/').split('/')
+ tags = self.get_tag_queryset().filter(slug__in=tag_slugs)
+
+ if not tags:
+ raise Http404
+
+ # Raise a 404 on an incorrect slug.
+ found_slugs = [tag.slug for tag in tags]
+ for slug in tag_slugs:
+ if slug and slug not in found_slugs:
+ raise Http404
+
+ events = self.get_event_queryset()
+ for tag in tags:
+ events = events.filter(tags=tag)
+
+ context = extra_context or {}
+ context.update({'tags': tags})
+
+ return events, context
+
+ def get_events_by_location(self, request, app_label, model, pk, extra_context=None):
+ try:
+ ct = ContentType.objects.get(app_label=app_label, model=model)
+ location = ct.model_class()._default_manager.get(pk=pk)
+ except ObjectDoesNotExist:
+ raise Http404
+
+ events = self.get_event_queryset().filter(location_content_type=ct, location_pk=location.pk)
+
+ context = extra_context or {}
+ context.update({
+ 'location': location
+ })
+ return events, context
+
+ # Detail View. TODO: fill this out.
+ def event_detail_view(self, request, year, month, day, slug, extra_context=None):
+ pass
+
+ # Archive Views. TODO: fill these out.
+ def tag_archive_view(self, request, extra_context=None):
+ pass
+
+ def location_archive_view(self, request, extra_context=None):
+ pass
+
+ def owner_archive_view(self, request, extra_context=None):
+ pass
+
+ # Feed information hooks