4
4
# Copyright (C) 2009 Jono Bacon <jono@ubuntu.com>
5
5
# Copyright (C) 2010 Michael Budde <mbudde@gmail.com>
6
# Copyright (c) 2011 John S Gruber <johnsgruber@gmail.com>
7
8
#This program is free software: you can redistribute it and/or modify it
8
9
#under the terms of the GNU General Public License version 3, as published
30
33
def __init__(self, **kwargs):
31
34
for k, v in kwargs.iteritems():
32
if k in ('title', 'description', 'instructors', 'local_start', 'local_end', 'slides', 'event'):
35
if k in ('title', 'description', 'instructors', 'helpers', 'local_start', 'local_end', 'slides', 'event'):
33
36
setattr(self, '_'+k, v)
44
47
def instructors(self):
45
return self._instructors
48
return getattr(self, '_instructors', [])
52
return getattr(self, '_helpers', [])
48
55
def start_local_date(self):
89
96
def parse_ical(event):
90
97
"""Parse iCal schedule for event and generate a list of Session objects"""
92
ical = urllib.urlopen(event.icalurl)
93
cal = vobject.readOne(ical)
101
DTSTART:20100101T000000Z
102
DTEND:20100101T000000Z
103
DESCRIPTION:CalendarError
104
SUMMARY: """ + _('Unable to load calendar %s\n') +
106
END:VCALENDAR""") % event.icalurl
107
default_cal_error2 = (
110
DTSTART:20100101T000000Z
111
DTEND:20100101T000000Z
112
DESCRIPTION:CalendarError
113
SUMMARY: """ + _('Unable to parse calendar %s\n') +
115
END:VCALENDAR""") % event.icalurl
117
ical = urllib2.urlopen(event.icalurl, None, 30)
119
logging.error('Unable to open calendar %s' % event.icalurl)
120
ical = io.StringIO(default_cal_error)
122
cal = vobject.readOne(ical)
124
logging.critical('Error parsing calendar at %s' % event.icalurl)
125
cal = vobject.readOne(io.StringIO(default_cal_error2))
98
130
eventend_local = dt.parse_time(event.eventend, '%Y-%m-%d %H:%M:%S')
100
132
for session in cal.vevent_list:
101
local_start = dt.as_local(session.dtstart.value)
102
local_end = dt.as_local(session.dtend.value)
104
if eventstart_local < local_start < eventend_local:
134
if not hasattr(session, "dtstart") or not hasattr(session, "dtend"):
135
logging.debug("Missing or invalid time for event")
136
local_start = eventend_local
137
local_end = eventend_local
139
local_start = dt.as_local(session.dtstart.value)
140
local_end = dt.as_local(session.dtend.value)
105
141
if hasattr(session, "description"):
142
if session.description.value == "CalendarError":
143
local_start = eventend_local
144
local_end = eventend_local
106
145
session_data = parse_ical_description(session.description.value)
146
if hasattr(session, "summary"):
147
summary = session.summary.value
149
summary = _('Missing Session Name')
150
if eventstart_local <= local_start <= eventend_local:
107
151
sessions.append(Session(
108
title = session.summary.value,
109
153
local_start = local_start,
110
154
local_end = local_end,
127
171
elif key == 'instructor' or key == 'instructors':
128
172
instructors = [s.strip() for s in value.split(',')]
129
173
session['instructors'] = instructors
174
elif key == 'helper' or key == 'helpers':
175
helpers = [s.strip() for s in value.split(',')]
176
session['helpers'] = helpers