You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
30 lines
1014 B
30 lines
1014 B
from icalendar import Calendar, Event, vText
|
|
from django.template.defaultfilters import striptags
|
|
from django.utils import timezone
|
|
|
|
from .models import EventPage
|
|
|
|
|
|
def generate_events_ics(queryset):
|
|
cal = Calendar()
|
|
for e in queryset:
|
|
assert isinstance(e, EventPage)
|
|
event = Event()
|
|
event.add('summary', vText(e.title))
|
|
event.add('description', vText(e.get_full_url() + '\n\n' + striptags(e.description.replace('<p>', '\n').replace('<br/>', '\n'))))
|
|
event['X-ALT-DESC'] = vText(e.get_full_url() + '<br/><br/>' + e.description)
|
|
event.add('dtstart', e.start_date)
|
|
event.add('uid', f'{e.slug}@feo.gmbh')
|
|
if e.end_date:
|
|
event.add('dtend', e.end_date)
|
|
|
|
if e.location_name:
|
|
event.add('location', vText(f'{e.location_name}, {e.location_street}, {e.location_city}'))
|
|
|
|
event.add('url', e.get_full_url())
|
|
|
|
event.add('dtstamp', timezone.now())
|
|
|
|
cal.add_component(event)
|
|
|
|
return cal.to_ical()
|
|
|