web/views/calendar.py
branchtls-sprint
changeset 1644 45bec81a9e1c
parent 1635 866563e2d0fc
child 1799 183acfaa3cde
equal deleted inserted replaced
1643:59c5cec05bbd 1644:45bec81a9e1c
     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