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)
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)
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()