Source code for events.feeds

"""The feeds defined by the events package"""
from django.conf import settings
from django.db.models.query_utils import Q
from django.urls import reverse
from django.utils.translation import activate
from django.utils.translation import gettext as _
from django_ical.views import ICalFeed

from events.models import Event, FeedToken


[docs]class EventFeed(ICalFeed): """Output an iCal feed containing all published events""" def __init__(self, lang="en"): super().__init__() self.lang = lang self.user = None def __call__(self, request, *args, **kwargs): if "u" in request.GET: self.user = FeedToken.get_member(request.GET["u"]) else: self.user = None return super().__call__(request, args, kwargs)
[docs] def product_id(self): return f"-//{settings.SITE_DOMAIN}//EventCalendar//{self.lang.upper()}"
[docs] def file_name(self): return "thalia_{}.ics".format(self.lang)
[docs] def title(self): activate(self.lang) return _("Study Association Thalia event calendar")
[docs] def items(self): query = Q(published=True) if self.user: query &= Q(registration_start__isnull=True) | ( Q(eventregistration__member=self.user) & Q(eventregistration__date_cancelled=None) ) return Event.objects.filter(query).order_by("-start")
[docs] def item_title(self, item): return item.title
[docs] def item_description(self, item): return f'{item.description} <a href="' f'{self.item_link(item)}">Website</a>'
[docs] def item_start_datetime(self, item): return item.start
[docs] def item_end_datetime(self, item): return item.end
[docs] def item_location(self, item): return "{} - {}".format(item.location, item.map_location)