4 :copyright: 2001-2009 LOGILAB S.A. (Paris, FRANCE), all rights reserved. |
4 :copyright: 2001-2009 LOGILAB S.A. (Paris, FRANCE), all rights reserved. |
5 :contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr |
5 :contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr |
6 """ |
6 """ |
7 |
7 |
8 from datetime import datetime, date, timedelta |
8 from datetime import datetime, date, timedelta |
9 |
|
10 from vobject import iCalendar |
|
11 |
9 |
12 from logilab.mtconverter import html_escape |
10 from logilab.mtconverter import html_escape |
13 |
11 |
14 from cubicweb.interfaces import ICalendarable |
12 from cubicweb.interfaces import ICalendarable |
15 from cubicweb.selectors import implements |
13 from cubicweb.selectors import implements |
30 _('november'), _('december') |
28 _('november'), _('december') |
31 ) |
29 ) |
32 |
30 |
33 # Calendar views ############################################################## |
31 # Calendar views ############################################################## |
34 |
32 |
35 |
33 try: |
36 class iCalView(EntityView): |
34 from vobject import iCalendar |
37 """A calendar view that generates a iCalendar file (RFC 2445) |
35 |
38 |
36 class iCalView(EntityView): |
39 Does apply to ICalendarable compatible entities |
37 """A calendar view that generates a iCalendar file (RFC 2445) |
40 """ |
38 |
41 __select__ = implements(ICalendarable) |
39 Does apply to ICalendarable compatible entities |
42 need_navigation = False |
40 """ |
43 content_type = 'text/calendar' |
41 __select__ = implements(ICalendarable) |
44 title = _('iCalendar') |
42 need_navigation = False |
45 templatable = False |
43 content_type = 'text/calendar' |
46 id = 'ical' |
44 title = _('iCalendar') |
47 |
45 templatable = False |
48 def call(self): |
46 id = 'ical' |
49 ical = iCalendar() |
47 |
50 for i in range(len(self.rset.rows)): |
48 def call(self): |
51 task = self.complete_entity(i) |
49 ical = iCalendar() |
52 event = ical.add('vevent') |
50 for i in range(len(self.rset.rows)): |
53 event.add('summary').value = task.dc_title() |
51 task = self.complete_entity(i) |
54 event.add('description').value = task.dc_description() |
52 event = ical.add('vevent') |
55 if task.start: |
53 event.add('summary').value = task.dc_title() |
56 event.add('dtstart').value = task.start |
54 event.add('description').value = task.dc_description() |
57 if task.stop: |
55 if task.start: |
58 event.add('dtend').value = task.stop |
56 event.add('dtstart').value = task.start |
59 |
57 if task.stop: |
60 buff = ical.serialize() |
58 event.add('dtend').value = task.stop |
61 if not isinstance(buff, unicode): |
59 |
62 buff = unicode(buff, self.req.encoding) |
60 buff = ical.serialize() |
63 self.w(buff) |
61 if not isinstance(buff, unicode): |
|
62 buff = unicode(buff, self.req.encoding) |
|
63 self.w(buff) |
|
64 |
|
65 except ImportError: |
|
66 pass |
64 |
67 |
65 class hCalView(EntityView): |
68 class hCalView(EntityView): |
66 """A calendar view that generates a hCalendar file |
69 """A calendar view that generates a hCalendar file |
67 |
70 |
68 Does apply to ICalendarable compatible entities |
71 Does apply to ICalendarable compatible entities |