Exemple #1
0
 def add(self, data):
     if not (data.home and data.away):
         logging.error("Invalid match data. %s" % (data.stadium,))
         return
     event = Event()
     title = u"%s vs. %s" % (data.home.display, data.away.display)
     if data.fixture:
         title += u" (第%d節)" % (data.fixture,)
     # TODO: define message resources to use i18n.
     if data.status == 'postponed':
         title = u"[延期]" + title
     elif data.status == 'stopped':
         title = u"[中止]" + title
     elif data.status == 'done':
         if data.description:
             event.set('description', u'試合結果:' + data.description)
     elif data.status == 'yet':
         pass
     else:
         logging.error('Unknown status "%s" on "%s" - "%s"',
                       data.status, data.home, data.away)
     event.set('summary', title)
     event['uid'] = uuid.uuid4().hex
     event.set('location', data.stadium)
     if data.kickoff.hour > 0:
         # Consider UTC Offset.
         t = (data.kickoff - timedelta(hours=9)).timetuple()
         start = datetime(t[0], t[1], t[2], t[3], t[4], tzinfo=pytz.utc)
         # TODO: icalendar issue to avoid 'VALUE=DATE' attribute.
         event['dtstart'] = start.strftime('%Y%m%dT%H%M00Z')
         e = start + timedelta(hours=2)
         event['dtend'] = e.strftime('%Y%m%dT%H%M00Z')
     else:
         event.set('dtstart', data.kickoff.date())
     self.cal.add_component(event)
Exemple #2
0
 def _add(self, data):
     event = Event()
     event['uid'] = uuid.uuid4().hex
     event['summary'] = data['ホーム'] + ' vs. ' + data['アウェイ']
     event['location'] = data['会場']
     if data['TV中継']:
         event['description'] = data['TV中継']
     y = 2011
     m, d = [int(i) for i in data['開催日'].split('/')]
     if data['キックオフ']:
         H, M = [int(i) for i in data['キックオフ'].split(':')]
         d = datetime(y, m, d, H, M)
         e = d + timedelta(hours=2)
         event.set('dtend', e)
     else:
         d = datetime(y, m, d)
     event.set('dtstart', d)
     logging.debug("New event is " + event.as_string())
     self.cal.add_component(event)
Exemple #3
0
    def get_calendar (self, obj, request):
        cal = Calendar ()
        site = Site.objects.get_current ()

        if obj is None:
            cal.add ('prodid', '-//Rocksoc Events Calendar//%s//' % site.domain)
        else:
            cal.add ('prodid', '-//Rocksoc Events Calendar//%s//%s' % (site.domain, obj.name or ''))
        cal.add ('version', '2.0')

        # FIXME: Currently, time zones aren't taken into account at all. This
        # might cause problems for people using the calendar from different
        # time zones. This hasn't been fixed yet because none of the site is
        # time-zone-aware (since capability for it was only added in Django
        # 1.4).

        for item in self.items (obj):
            ical_event = ICalendarEvent ()

            ical_event.set ('summary', item.ename)
            if item.edescription:
                ical_event.set ('description', item.edescription)
            if item.venue:
                ical_event.add ('location', item.venue)
            # FIXME: Can't get this to work with CN
            #if item.organised_by != '':
            #    address = vCalAddress ('')
            #    address.params['cn'] = item.organised_by
            #    ical_event.add ('organizer', address)
            if item.elink:
                if item.elink.startswith ('http:') or item.elink.startswith ('https:'):
                    ical_event.add ('url', item.elink)
                else:
                    ical_event.add ('url', 'http://%s/%s' % (
                        Site.objects.get_current ().domain,
                        item.elink,
                    ))
            if item.category:
                ical_event.add ('categories', item.category.name)
            if item.eoutlink:
                ical_event.add ('attach', item.eoutlink)

            ical_event.set ('dtstart', vDatetime (item.edatetime), encode = False)
            end_time = item.get_finish_datetime () and item.get_finish_datetime () or item.edatetime
            ical_event.set ('dtend', vDatetime (end_time), encode = False)
            ical_event.set ('dtstamp', vDatetime (end_time), encode = False)
            if item.last_modified:
                ical_event.set ('last-modified', vDatetime (item.last_modified), encode = False)

            ical_event.set ('uid', '%d@%s' % (item.id, site.domain))

            cal.add_component (ical_event)

        return cal
    def to_ical(self):
        
        self._load_categories()
        
        ical = Calendar()

        ical.add('prodid', '-//Czagenda//czagenda.org//')
        ical.add('version', '2.0')
        ical.add('method', 'PUBLISH')
        
        for row in self.results['rows']:
            
            event = row['event']
        
            ical_event = Event()
            
            ical_event.set('uid', '*****@*****.**' % row['id'])
            ical_event.set('status', event['eventStatus'].upper())
            
            ical_event.add('dtstamp', self.set_tzinfo(iso8601.parse_date(row['createDate'])))
            ical_event.add('CREATED',  self.set_tzinfo(iso8601.parse_date(row['createDate'])))
            ical_event.add('LAST-MODIFIED',  self.set_tzinfo(iso8601.parse_date(row['updateDate'])))
            
            ical_event.add('TRANSP', 'TRANSPARENT' )
            
            ical_event.set('summary', event['title'])
            
            description = []
            if len(event.get('subtitle', '')) > 0:
                description.append(event['subtitle'])
            if len(event.get('shortDescription', '')) > 0:
                description.append(event['shortDescription'])
            if len(event.get('content', '')) > 0:
                description.append(event['content'])
            
            
            if event.has_key('contacts'):
                
                text_contacts = ['Contacts:']
                
                for contact in event['contacts']:
                    text_contact = [contact['rel']]
                    if contact.has_key('email'):
                        text_contact.append("email: %s" % contact['email'])
                    if contact.has_key('phone'):
                        text_contact.append("phone: %s" % contact['phone'])
                    if contact.has_key('fax'):
                        text_contact.append("fax: %s" % contact['fax'])
                    if contact.has_key('link'):
                        text_contact.append("website: %s" % contact['link'])
                    if contact.has_key('additionalInformations'):
                        text_contact.append(contact['additionalInformations'])
                    
                    text_contacts.append(u'/'.join(text_contact))
                    
                description.append('\n'.join(text_contacts))
                    
            
            if len(description)>0:
                ical_event.set('description', u'\n\n'.join(description))
            
            if event.has_key('website'):
                ical_event.set('url', event['website'])
            
            
            ical_event.set('dtstart',  self.set_tzinfo(event['when'][0]['startTime']))
                
            if event['when'][0].has_key('endTime'):
                ical_event.add('dtend',  self.set_tzinfo(event['when'][0]['endTime']))
                    
            
            """
            if RE_ISO8601.match(event['when'][0]['startTime']):
                ical_event.set('dtstart',  self.set_tzinfo(iso8601.parse_date(event['when'][0]['startTime'])))
                
                if event['when'][0].has_key('endTime'):
                    ical_event.add('dtend',  self.set_tzinfo(iso8601.parse_date(event['when'][0]['endTime'])))
                
            else:
                
                dt = datetime.strptime(event['when'][0]['startTime'][0:10], '%Y-%m-%d')
                ical_event.set('dtstart', date(dt.year, dt.month, dt.day))
                
                if event['when'][0].has_key('endTime'):
                    dt = datetime.strptime(event['when'][0]['endTime'][0:10], '%Y-%m-%d')
                    ical_event.add('dtend', date(dt.year, dt.month, dt.day))
            """
            
            location = []
            
            if event.has_key('place'):
                location.append(event['place']['name'])
            
            if event.has_key('where') and len(event['where']) > 0:
                
                try:
                    location.append(event['where'][0]['street'])
                except KeyError:
                    pass
                
                try:
                    location.append(event['where'][0]['city'])
                except KeyError:
                    pass   
                
                try:
                    location.append(event['where'][0]['zipCode'])
                except KeyError:
                    pass  
                
                try:
                    location.append(event['where'][0]['country'])
                except KeyError:
                    pass                
                
                if event['where'][0].has_key('geoPt'):
                    ical_event.add('geo', (event['where'][0]['geoPt']['lat'], event['where'][0]['geoPt']['lon'] ))
                
            if len(location) > 0:
                ical_event.add('location', u', '.join(location))
                    
            try:
                categories = [CzAgendaHelper.CATEGORIES[event['category']]]
            except KeyError:
                self._load_categories(force_reload=True)
                categories = [CzAgendaHelper.CATEGORIES[event['category']]]
            
            if event.has_key('tags'):
                for tag in event['tags']:
                    categories.append(tag)
            
            ical_event.set('categories', u', '.join(categories))
            ical_event.set('class', self._get_event_class(row))
            
            ical.add_component(ical_event)
            
        return ical.to_ical()