This repository has been archived on 2023-02-21. You can view files and clone it, but cannot push or open issues or pull requests.
tabellio.icalimport/tabellio/icalimport/icalimport.py

51 lines
2.1 KiB
Python

import datetime
import urllib2
import vobject
from Products.CMFCore.WorkflowCore import WorkflowException
from Products.CMFCore.utils import getToolByName
from Products.Five.browser import BrowserView
class IcalImport(BrowserView):
def __call__(self):
print 'ical import into', self.context
self.plone_utils = getToolByName(self.context, 'plone_utils')
self.portal_workflow = getToolByName(self.context, 'portal_workflow')
url = self.request.form.get('url')
content = urllib2.urlopen(url).read()
parsed_cal = vobject.readOne(content)
for vevent in parsed_cal.vevent_list:
title = vevent.summary.value
date_start = vevent.dtstart.value
if isinstance(date_start, datetime.date):
date_start = datetime.datetime.fromordinal(date_start.toordinal())
try:
date_end = vevent.dtend.value
if isinstance(date_end, datetime.date):
date_end = datetime.datetime.fromordinal(date_end.toordinal())
except AttributeError:
date_end = None
event_id = self.plone_utils.normalizeString(
'%04d-%02d-%02d-%s' % (date_start.year,
date_start.month,
date_start.day,
title))
if not hasattr(self.context, event_id):
self.context.invokeFactory('tabellio.agenda.event', event_id, title=title)
event = getattr(self.context, event_id)
event.title = title
event.start = date_start
event.end = date_end
try:
event.description = vevent.description.value
except AttributeError:
pass
try:
event.location = vevent.location.value
except AttributeError:
pass
try:
self.portal_workflow.doActionFor(getattr(self.context, event_id), 'publish')
except WorkflowException:
pass