Ejemplo n.º 1
0
 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()
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
    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)
Ejemplo n.º 4
0
    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
Ejemplo n.º 5
0
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