1 #!/usr/bin/env python 2 3 from imiptools.data import get_freebusy_period, get_datetime_item, get_value, get_value_map, parse_object 4 from imiptools.dates import format_datetime, get_default_timezone 5 from imiptools.profile import Preferences 6 from imip_store import FileStore, FilePublisher 7 import sys 8 9 try: 10 user = sys.argv[1] 11 except IndexError: 12 print >>sys.stderr, "Need a user." 13 sys.exit(1) 14 15 preferences = Preferences(user) 16 tzid = preferences.get("TZID") or get_default_timezone() 17 18 s = FileStore() 19 p = FilePublisher() 20 21 events = set(s.get_events(user)) 22 cancelled = s.get_cancellations(user) or [] 23 24 events.difference_update(cancelled) 25 26 objs = [] 27 for i in events: 28 print >>sys.stderr, i 29 objs.append(parse_object(s.get_event(user, i), "utf-8")) 30 31 fb = [] 32 for obj in objs: 33 if not obj: 34 continue 35 details, details_attr = obj.values()[0] 36 37 participants = {} 38 participants.update(get_value_map(details, "ATTENDEE")) 39 participants.update(get_value_map(details, "ORGANIZER")) 40 41 for participant, participant_attr in participants.items(): 42 if participant == user: 43 if participant_attr.get("PARTSTAT") != "DECLINED": 44 dtstart, dtstart_attr = get_datetime_item(details, "DTSTART") 45 dtend, dtend_attr = get_datetime_item(details, "DTEND") 46 event_tzid = dtstart_attr.get("TZID") or dtend_attr.get("TZID") or tzid 47 dtstart, dtend = get_freebusy_period(dtstart, dtend, event_tzid) 48 fb.append((format_datetime(dtstart), 49 format_datetime(dtend), 50 get_value(details, "UID"), 51 get_value(details, "TRANSP"))) 52 break 53 54 fb.sort() 55 56 s.set_freebusy(user, fb) 57 p.set_freebusy(user, fb) 58 59 # vim: tabstop=4 expandtab shiftwidth=4