def export_ics(self): events = Event.get_recent_past_and_future() url_base = 'http://' + self.request.headers.get('host', 'events.hackerdojo.com') cal = Calendar() for event in events: iev = CalendarEvent() iev.add('summary', event.name if event.status == 'approved' else event.name + ' (%s)' % event.status.upper()) # make verbose description with empty fields where information is missing ev_desc = '__Status: %s\n__Member: %s\n__Type: %s\n__Estimated size: %s\n__Info URL: %s\n__Fee: %s\n__Contact: %s, %s\n__Rooms: %s\n\n__Details: %s\n\n__Notes: %s' % ( event.status, event.owner(), event.type, event.estimated_size, event.url, event.fee, event.contact_name, event.contact_phone, event.roomlist(), event.details, event.notes) # then delete the empty fields with a regex ev_desc = re.sub(re.compile(r'^__.*?:[ ,]*$\n*',re.M),'',ev_desc) ev_desc = re.sub(re.compile(r'^__',re.M),'',ev_desc) ev_url = url_base + event_path(event) iev.add('description', ev_desc + '\n--\n' + ev_url) iev.add('url', ev_url) if event.start_time: iev.add('dtstart', event.start_time.replace(tzinfo=pytz.timezone('US/Pacific'))) if event.end_time: iev.add('dtend', event.end_time.replace(tzinfo=pytz.timezone('US/Pacific'))) cal.add_component(iev) return 'text/calendar', cal.as_string()
def generate_icalendar_element(event): icalendar_event = CalendarEvent() if event.start_time: icalendar_event.add('dtstart', event.start_time) if event.end_time: icalendar_event.add('dtend', event.end_time) if event.name_en: icalendar_event.add('summary', event.name_en) cal = Calendar() cal.add('version', '2.0') cal.add('prodid', '-//events.hel.fi//NONSGML Feeder//EN') cal.add_component(icalendar_event) term = None if event.start_time and event.end_time: term = "open" elif event.start_time: term = "open" elif event.end_time: term = "close" if term: return { "term": "open", "value": cal.to_ical().decode('utf8'), "type": "text/icalendar" } else: return None
def to_ical(self): """Returns iCalendar event object. Returns: Calendar """ event = CalendarEvent() starts = self.get_next_starts_with_tz() event.add("dtstart", starts) event.add("dtstamp", starts) if ends := self.get_next_ends_with_tz(): event.add("dtend", ends)
def render_to_response(self, context): # A hack while waiting for python 1.5 upgrade cal = Calendar() cal.add('version', '2.0') cal.add('prodid', '-//Nidarholm//Publisert kalender//') cal.add('X-WR-CALNAME', 'Publisert kalender') #cal.add('method', 'PUBLISH') #cal.add('calscale').value = 'GREGORIAN' cal['x-original'] = "http://" + self.request.get_host() + reverse( 'events-archive') localtimezone = LocalTimezone() for event in self.get_queryset(): e = CalendarEvent() e['uid'] = "*****@*****.**" % event.id e.add( 'url', "http://" + self.request.get_host() + event.get_absolute_url()) e.add('summary', event.title) e.add('description', event.content) if event.location: e.add('location', event.location) e.add('dtstamp', event.updated.replace(tzinfo=pytz.utc)) if event.whole_day or event.start.time() == time(0, 0, 0): e.add('dtstart', event.start.replace(tzinfo=pytz.utc).date()) if not event.end or event.end == event.start: e.add('dtend', (event.start + timedelta(1)).replace(tzinfo=pytz.utc).date()) else: e.add('dtend', event.end.replace(tzinfo=pytz.utc).date()) else: e.add('dtstart', event.start.replace(tzinfo=pytz.utc)) if event.end: e.add('dtend', event.end.replace(tzinfo=pytz.utc)) else: e.add('dtend', event.start.replace(tzinfo=pytz.utc)) cal.add_component(e) icalstream = cal.to_ical() response = HttpResponse(icalstream, mimetype='text/calendar') name = slugify(self.request.organization.site.name) response['Filename'] = name + '.ics' # IE needs this response[ 'Content-Disposition'] = 'attachment; filename=' + name + '.ics' response['Content-Type'] = 'text/calendar; charset=utf-8' return response
def make_calendar_event(event): """ Creates an Event object based off our Event model @param event: The event to read data from @type event: Event @return: the Event object to be added to the calendar @rtype: CalendarEvent """ calendar_event = CalendarEvent() calendar_event.add("uid", vText(str(event.id))) calendar_event.add("summary", vText(event.name)) calendar_event.add("dtstart", combine(event.startDate, event.startTime)) calendar_event.add("dtend", combine(event.endDate, event.endTime)) calendar_event.add("dtstamp", datetime.now()) calendar_event.add("description", vText(event.description)) calendar_event.add("location", vText(event.link) if event.virtual else vText(event.location)) return calendar_event