Ejemplo n.º 1
0
    def install(self):
        service = self.setup_service()

        self.user_regex = compile(self.options.get('user_regex', '.*'))

        feed = service.GetOwnCalendarsFeed()
        csv_filename = self.options.get('csv_filename', 'temp.csv')
        csvwriter = writer(open(csv_filename, 'wb'))
        # keep the header in sync with event_details
        csvwriter.writerow(self.headers)
        for i, calendar in enumerate(feed.entry):
            # is there no other way to get the 'user' of a feed?
            user = unquote(calendar.content.src.split('/')[5])
            print '%s. %r\t%r\t%r\t%r' % (i, calendar.title.text, calendar.timezone.value, calendar.hidden.value, user)
            query = CalendarEventQuery(user)
            if 'start_min' in self.options:
                query.start_min = self.options['start_min']
            if 'start_max' in self.options:
                query.start_max = self.options['start_max']
            query.max_results = self.options.get('max_results', '500')
            events_feed = service.CalendarQuery(query)
            print ' %r' % (len(events_feed.entry),)
            assert len(events_feed.entry) < int(query.max_results)
            for event in events_feed.entry:
                # skip recurrent event because they are too ambiguous
                if event.recurrence:
                    print 'Skip: recurrent event %r' % event.title.text
                    continue
                for event_row in self.event_details(event):
                    csvwriter.writerow([calendar.title.text] + event_row)
        self.buildout.namespace['google_calendar'] = {'csv_filename': csv_filename}
        return tuple()
Ejemplo n.º 2
0
def fetch_events():
	username = '******'
	visibility = 'private-fa3dc4aa8a14f7da0099eb6fb34a036a'
	query = CalendarEventQuery(username, visibility)
	query.sortorder = 'a'
	query.futureevents = 'true'
	query.orderby = 'starttime'
	calendar_service = CalendarService()
	feed = calendar_service.CalendarQuery(query)
	return [{'title':item.title.text, 'start_time':parse(item.when[0].start_time), 'end_time':parse(item.when[0].end_time), 'location':item.where[0].value_string} for item in feed.entry]
Ejemplo n.º 3
0
def dateQuery(client, calendarName, start_date, end_date, **kwargs):
    """
    Retrieves events from the server which occur during the specified date
    range.

    **kwargs may be specified to enhance the query
    """
    query = CalendarEventQuery(calendarName, 'private', 'full')
    query.update(kwargs)
    query.start_min = start_date
    query.start_max = end_date
    return client.CalendarQuery(query)
Ejemplo n.º 4
0
    def query(self, start_date, end_date, calendar='default'):
        query = CalendarEventQuery(calendar, 'private', 'full')
        query.start_min = str(start_date)
        query.start_max = str(end_date)

        logging.getLogger(__name__).info(
            "Querying Google Calendar %s." % calendar)

        try:
            return self.calendar_service.CalendarQuery(query)
        except NotAuthenticated:  # pragma: no cover
            try:
                self.login()
            except BadAuthentication:
                pass
            else:
                return self.query(start_date, end_date)
Ejemplo n.º 5
0
    def query(self, start_date, end_date, calendar='default'):
        query = CalendarEventQuery(calendar, 'private', 'full')
        query.start_min = str(start_date)
        query.start_max = str(end_date)

        logging.getLogger(__name__).info("Querying Google Calendar %s." %
                                         calendar)

        try:
            return self.calendar_service.CalendarQuery(query)
        except NotAuthenticated:  # pragma: no cover
            try:
                self.login()
            except BadAuthentication:
                pass
            else:
                return self.query(start_date, end_date)
Ejemplo n.º 6
0
  def _get_parser(self):
    calendar_service = CalendarService()

    yesterday    = datetime.today() - timedelta(days = 1)
    three_months = yesterday + timedelta(days = 90)

    query = CalendarEventQuery(self.calendar_id(), 'public', 'full')

    query.start_min      = yesterday.strftime('%F')
    query.start_max      = three_months.strftime('%F')
    
    query['max-results'] = '500'

    feed = calendar_service.CalendarQuery(query)
    
    start_date = lambda e: date_util.parse_date_time(e.when[0].start_time).date()
    
    single    = []
    recurring = []
    
    for e in feed.entry:
      if len(e.when) > 1:
        recurring.append(e)
      else:
        single.append(e)
        
    for show in self._process_recurring_entries(recurring):
      if show:
        yield show

    if self.group_by_date():
      single.sort(key = start_date)

      for batch_date, date_entries in groupby(single, start_date):
        for show in self._process_entry_group(batch_date, list(date_entries)):
          if show:
            pass
          
          yield show 
    else:
      for entry in single:
        show = self._process_entry(entry)

        if show:
          yield show
 def update_events(self, since_date, until_date):
     print 'Update events:', since_date, 'until', until_date
     
     # Timestamps
     since = int(mktime(since_date.timetuple()))
     until = int(mktime(until_date.timetuple()))
     
     # Clear old events
     key = (since, until)
     self.events[key] = []
     
     # Get events from all calendars
     for calendar, feed_url in self.calendars:
         print 'Getting events from', calendar, '...'
         
         query = CalendarEventQuery()
         query.feed = feed_url
         query.start_min = since_date.strftime('%Y-%m-%d')
         query.start_max = until_date.strftime('%Y-%m-%d')
         feed = self.client.CalendarQuery(query)
         
         for event in feed.entry:
             event_id = event.id.text
             title = event.title.text
             
             print '  ', title
             
             for when in event.when:
                 print '    ', when.start_time, 'to', when.end_time
                 
                 allday = False
                 
                 start, allday = self.parse_time(when.start_time)
                 end, _ = self.parse_time(when.end_time)
                 
                 if (start >= since and start < until) or \
                    (start <= since and (end - 1) > since):
                     
                     e = Event(event_id, title, start, end, allday)
                     self.events[key].append(e)
                     
                 else:
                     print '!!! Outside range !!!'
     
     print '#Events:', len(self.events[key])
Ejemplo n.º 8
0
def upcoming_events(days=90):

    # Create a Google Calendar client to talk to the Google Calendar service.
    calendar_client = CalendarService()

    # Set up a query with the GCAL_ID.
    query = CalendarEventQuery(app.config['GCAL_ID'], 'public', 'full')
    query.orderby = 'starttime'
    query.sortorder = 'descending'

    # we're interested in events in the next 60 days if we wanted all the
    # futuer events, we'd use query.futureevents='true' and ignore the
    # start_min, start_max options
    month_offset = timedelta(days=days)

    start_min = _now()
    start_max = start_min + month_offset

    query.start_min = start_min.isoformat()
    query.start_max = start_max.isoformat()

    # query gcal for the time interval
    return list(reversed([CalendarEvent(e) for e in
                         calendar_client.CalendarQuery(query).entry]))
    def update_months_events(self,
                             probe_date,
                             in_thread=False,
                             months_back=12,
                             months_ahead=12):
        if in_thread:
            prefix = '      <<<<THREAD>>>>  '
        else:
            prefix = '    '

        print prefix, 'Update months events around:',\
                probe_date.strftime('%B %Y'), '| months_back', months_back,\
                '| months_ahead', months_ahead

        months = {}

        # init asked month events
        key = initial_month_key = get_month_key(probe_date)
        months[key] = MonthEvents(key, [])

        # init previous months events
        for i in range(0, months_back):
            key = months[key].get_prev_month_key()
            months[key] = MonthEvents(key, [])
        # date for google query start limit
        min_date = months[key].get_start_date()

        # init next months events
        key = initial_month_key
        for i in range(0, months_ahead):
            key = months[key].get_next_month_key()
            months[key] = MonthEvents(key, [])
        # date for google query end limit
        max_date = months[key].get_end_date()

        # Get events from all calendars
        for calendar_title, feed_url in self.calendars:
            print prefix, 'Getting events from', calendar_title, '...'

            query = CalendarEventQuery()
            query.feed = feed_url
            query.start_min = min_date.strftime('%Y-%m-%d')
            query.start_max = max_date.strftime('%Y-%m-%d')
            query.max_results = 2**31 - 1
            feed = self.client.CalendarQuery(query)

            for event in feed.entry:
                event_id = event.id.text
                title = event.title.text

                if debug:
                    print '%s Event: title=%s' % (prefix, repr(title))

                for when in event.when:
                    if debug:
                        print '%s    start_time=%s end_time=%s' % (
                            prefix, repr(when.start_time), repr(when.end_time))

                    allday = False
                    start, allday = self.parse_time(when.start_time)
                    end = self.parse_time(when.end_time)[0]

                    e = Event(event_id, title, start, end, allday,
                              calendar_title)
                    for month in months.values():
                        month.add_event(e)

        # Replace old months events by new ones
        # TODO repair deletion if python doesn't do it
        for key, month in months.items():
            month.updated()
            #            print '!'
            #            self.months[key].delete()
            #            print '!'
            #            del self.months[key]
            self.months[key] = month

        print prefix, '#Updated events since', \
                (min_date + timedelta(days=10)).strftime('%B %Y'), \
                'until', (max_date - timedelta(days=10)).strftime('%B %Y')
    def update_months_events(self, probe_date, in_thread=False,
                            months_back=12, months_ahead=12):
        if in_thread:
            prefix = '      <<<<THREAD>>>>  '
        else:
            prefix = '    '

        print prefix, 'Update months events around:',\
                probe_date.strftime('%B %Y'), '| months_back', months_back,\
                '| months_ahead', months_ahead

        months = {}

        # init asked month events
        key = initial_month_key = get_month_key(probe_date)
        months[key] = MonthEvents(key, [])

        # init previous months events
        for i in range(0, months_back):
            key = months[key].get_prev_month_key()
            months[key] = MonthEvents(key, [])
        # date for google query start limit
        min_date = months[key].get_start_date()

        # init next months events
        key = initial_month_key
        for i in range(0, months_ahead):
            key = months[key].get_next_month_key()
            months[key] = MonthEvents(key, [])
        # date for google query end limit
        max_date = months[key].get_end_date()

        # Get events from all calendars
        for calendar_title, feed_url in self.calendars:
            print prefix, 'Getting events from', calendar_title, '...'

            query = CalendarEventQuery()
            query.feed = feed_url
            query.start_min = min_date.strftime('%Y-%m-%d')
            query.start_max = max_date.strftime('%Y-%m-%d')
            query.max_results = 2**31-1
            feed = self.client.CalendarQuery(query)

            for event in feed.entry:
                event_id = event.id.text
                title = event.title.text

                if debug:
                    print '%s Event: title=%s' % ( prefix, repr(title) )

                for when in event.when:
                    if debug:
                        print '%s    start_time=%s end_time=%s' % ( prefix,
                                repr(when.start_time), repr(when.end_time) )

                    allday = False
                    start, allday = self.parse_time(when.start_time)
                    end = self.parse_time(when.end_time)[0]

                    e = Event(event_id, title, start, end, allday,
                            calendar_title)
                    for month in months.values():
                        month.add_event(e)

        # Replace old months events by new ones
        # TODO repair deletion if python doesn't do it
        for key, month in months.items():
            month.updated()
#            print '!'
#            self.months[key].delete()
#            print '!'
#            del self.months[key]
            self.months[key] = month

        print prefix, '#Updated events since', \
                (min_date + timedelta(days=10)).strftime('%B %Y'), \
                'until', (max_date - timedelta(days=10)).strftime('%B %Y')