fix a few ics related things, move ics functions to seperate file
This commit is contained in:
parent
484c864417
commit
33689c5270
|
@ -226,16 +226,17 @@ urlpatterns = [
|
||||||
CallForSpeakersView.as_view(),
|
CallForSpeakersView.as_view(),
|
||||||
name='call_for_speakers'
|
name='call_for_speakers'
|
||||||
),
|
),
|
||||||
url(
|
|
||||||
r'^(?P<slug>[-_\w+]+)/$',
|
|
||||||
EventDetailView.as_view(),
|
|
||||||
name='event_detail'
|
|
||||||
),
|
|
||||||
url(
|
url(
|
||||||
r'^calendar/',
|
r'^calendar/',
|
||||||
ICSView.as_view(),
|
ICSView.as_view(),
|
||||||
name='ics_calendar'
|
name='ics_calendar'
|
||||||
),
|
),
|
||||||
|
# this has to be the last URL here
|
||||||
|
url(
|
||||||
|
r'^(?P<slug>[-_\w+]+)/$',
|
||||||
|
EventDetailView.as_view(),
|
||||||
|
name='event_detail'
|
||||||
|
),
|
||||||
])
|
])
|
||||||
),
|
),
|
||||||
|
|
||||||
|
|
25
src/program/ics.py
Normal file
25
src/program/ics.py
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
import icalendar
|
||||||
|
from icalendar import vDatetime
|
||||||
|
|
||||||
|
|
||||||
|
def gen_icalevents(event):
|
||||||
|
for i in event.days.all():
|
||||||
|
ievent = icalendar.Event()
|
||||||
|
ievent['summary'] = event.title
|
||||||
|
|
||||||
|
newdate = datetime.datetime.combine(i.date, datetime.time(event.start.hour, event.start.minute, event.start.second))
|
||||||
|
ievent['dtstart'] = vDatetime(newdate).to_ical()
|
||||||
|
|
||||||
|
newdate = datetime.datetime.combine(i.date, datetime.time(event.end.hour, event.end.minute, event.end.second))
|
||||||
|
ievent['dtend'] = vDatetime(newdate).to_ical()
|
||||||
|
|
||||||
|
yield ievent
|
||||||
|
|
||||||
|
def gen_ics(events):
|
||||||
|
cal = icalendar.Calendar()
|
||||||
|
for event in events:
|
||||||
|
for ical_event in gen_icalevents(event):
|
||||||
|
cal.add_component(ical_event)
|
||||||
|
return cal.to_ical()
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from django.views.generic import ListView, TemplateView, DetailView
|
from django.views.generic import ListView, TemplateView, DetailView, View
|
||||||
from django.views.generic.edit import CreateView, UpdateView
|
from django.views.generic.edit import CreateView, UpdateView
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.views.decorators.http import require_safe
|
from django.views.decorators.http import require_safe
|
||||||
|
@ -12,33 +12,12 @@ from camps.mixins import CampViewMixin
|
||||||
from .mixins import CreateProposalMixin, EnsureUnapprovedProposalMixin, EnsureUserOwnsProposalMixin, EnsureWritableCampMixin, PictureViewMixin, EnsureCFSOpenMixin
|
from .mixins import CreateProposalMixin, EnsureUnapprovedProposalMixin, EnsureUserOwnsProposalMixin, EnsureWritableCampMixin, PictureViewMixin, EnsureCFSOpenMixin
|
||||||
from . import models
|
from . import models
|
||||||
import datetime, os
|
import datetime, os
|
||||||
import icalendar
|
from .ics import gen_ics
|
||||||
from icalendar import vDatetime
|
|
||||||
|
|
||||||
|
|
||||||
############## ical calendar ########################################################
|
############## ical calendar ########################################################
|
||||||
|
|
||||||
|
|
||||||
def gen_icalevents(event):
|
|
||||||
for i in event.days.all():
|
|
||||||
ievent = icalendar.Event()
|
|
||||||
ievent['summary'] = event.title
|
|
||||||
|
|
||||||
newdate = datetime.datetime.combine(i.date, datetime.time(event.start.hour, event.start.minute, event.start.second))
|
|
||||||
ievent['dtstart'] = vDatetime(newdate).to_ical()
|
|
||||||
|
|
||||||
newdate = datetime.datetime.combine(i.date, datetime.time(event.end.hour, event.end.minute, event.end.second))
|
|
||||||
ievent['dtend'] = vDatetime(newdate).to_ical()
|
|
||||||
|
|
||||||
yield ievent
|
|
||||||
|
|
||||||
def gen_ics(events):
|
|
||||||
cal = icalendar.Calendar()
|
|
||||||
for event in events:
|
|
||||||
for ical_event in gen_icalevents(event):
|
|
||||||
cal.add_component(ical_event)
|
|
||||||
return cal.to_ical()
|
|
||||||
|
|
||||||
class ICSView(View):
|
class ICSView(View):
|
||||||
def get(self, request, *args, **kwargs):
|
def get(self, request, *args, **kwargs):
|
||||||
return HttpResponse(gen_ics(models.Event.objects.all()))
|
return HttpResponse(gen_ics(models.Event.objects.all()))
|
||||||
|
|
Loading…
Reference in a new issue