diff options
Diffstat (limited to 'sublab_project/calendarium/calendarium.py')
-rw-r--r-- | sublab_project/calendarium/calendarium.py | 77 |
1 files changed, 0 insertions, 77 deletions
diff --git a/sublab_project/calendarium/calendarium.py b/sublab_project/calendarium/calendarium.py deleted file mode 100644 index 9935ace..0000000 --- a/sublab_project/calendarium/calendarium.py +++ /dev/null @@ -1,77 +0,0 @@ -import icalendar -from dateutil.rrule import rrulestr - - -class Event(object): - def __init__(self, name, description, start, end): - self.name = name - self.description = description - self.start = start - self.end = end - - def __repr__(self): - return '<%s.%s (name=%s, start=%s, end=%s)>' % ( - __name__, self.__class__.__name__, - repr(self.name), repr(self.start), repr(self.end)) - - -class Calendarium(object): - def __init__(self, string): - """ - Loads a calendar from the string and provides a nice API to it. - """ - self.calendar = icalendar.Calendar.from_string(string) - - def get_events(self, after, before): - """ - This functions yields a list of events in the calendar. - - Only events after (including) after will be shown. Recurring - events til before (inclusively) will be shown. - """ - - for event in self.calendar.walk('vevent'): - event_fields = [ - # dest , src, default - ('name', 'summary', 'unknown Event'), - ('description', 'description', ''), - ] - - event_info = {} - for fieldinfo in event_fields: - try: - event_info[fieldinfo[0]] = str(event[fieldinfo[1]]) - except KeyError: - event_info[fieldinfo[0]] = fieldinfo[2] - - start = icalendar.vDatetime.from_ical(event['dtstart'].ical()) - end = icalendar.vDatetime.from_ical(event['dtend'].ical()) - - if 'rrule' in event: - rrule = rrulestr(event['rrule'].ical(), dtstart=start) - duration = end - start - - for occurence in rrule.between(after, before, True): - yield Event( - start=occurence, - end=occurence + duration, - **event_info) - else: - if start >= after: - yield Event(start=start, end=end, **event_info) - -if __name__ == '__main__': - # simple example - - from dateutil.relativedelta import relativedelta - from datetime import datetime - import urllib2 - - response = urllib2.urlopen('https://sublab.org:5232/calendars/events') - calendar = Calendarium(response.read()) - now = datetime.now() - events = list(calendar.get_events(now-relativedelta(days=1), now+relativedelta(months=+2))) - events.sort(key=lambda x:x.start) - - for event in events: - print event |