2
Browser views for schoolbell.
7
CalendarICalendarView can export calendars in iCalendar format
9
>>> from datetime import datetime, timedelta
10
>>> from schoolbell.simple import ImmutableCalendar, SimpleCalendarEvent
11
>>> event = SimpleCalendarEvent(datetime(2004, 12, 16, 11, 46, 16),
12
... timedelta(hours=1), "doctests",
13
... location=u"Matar\u00f3",
14
... unique_id="12345678-5432@example.com")
15
>>> calendar = ImmutableCalendar([event])
17
>>> from zope.publisher.browser import TestRequest
18
>>> view = CalendarICalendarView()
19
>>> view.context = calendar
20
>>> view.request = TestRequest()
21
>>> output = view.show()
23
>>> lines = output.splitlines(True)
24
>>> from pprint import pprint
26
['BEGIN:VCALENDAR\r\n',
28
'PRODID:-//SchoolTool.org/NONSGML SchoolBell//EN\r\n',
30
'UID:12345678-5432@example.com\r\n',
31
'SUMMARY:doctests\r\n',
32
'LOCATION:Matar\xc3\xb3\r\n',
33
'DTSTART:20041216T114616\r\n',
39
XXX: Should the last line also end in '\r\n'? Go read RFC 2445 and experiment
40
with calendaring clients.
42
Register the iCalendar read view in ZCML as
45
for="schoolbell.interfaces.ICalendar"
47
permission="zope.Public"
48
class="schoolbell.browser.CalendarICalendarView"
54
from schoolbell.icalendar import convert_calendar_to_ical
59
class CalendarICalendarView:
60
"""RFC 2445 (ICalendar) view for calendars."""
63
data = "\r\n".join(convert_calendar_to_ical(self.context))
64
request = self.request
65
if request is not None:
66
request.response.setHeader('Content-Type',
67
'text/calendar; charset=UTF-8')
68
request.response.setHeader('Content-Length', len(data))