1 #!/usr/bin/env python 2 3 from imiptools.data import get_freebusy_period, get_datetime_item, get_utc_datetime, get_value, get_value_map 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 = s.get_events(user) 22 23 all_events = set() 24 for uid in events: 25 all_events.add((uid, None)) 26 all_events.update([(uid, recurrenceid) for recurrenceid in s.get_recurrences(user, uid)]) 27 28 cancelled = s.get_cancellations(user) or [] 29 all_events.difference_update(cancelled) 30 31 objs = [] 32 for uid, recurrenceid in all_events: 33 print >>sys.stderr, uid, recurrenceid 34 objs.append(s.get_event(user, uid, recurrenceid)) 35 36 fb = [] 37 for obj in objs: 38 if not obj: 39 continue 40 details, details_attr = obj.values()[0] 41 42 participants = {} 43 participants.update(get_value_map(details, "ATTENDEE")) 44 participants.update(get_value_map(details, "ORGANIZER")) 45 46 for participant, participant_attr in participants.items(): 47 if participant == user: 48 if participant_attr.get("PARTSTAT") != "DECLINED": 49 dtstart, dtstart_attr = get_datetime_item(details, "DTSTART") 50 dtend, dtend_attr = get_datetime_item(details, "DTEND") 51 event_tzid = dtstart_attr.get("TZID") or dtend_attr.get("TZID") or tzid 52 dtstart, dtend = get_freebusy_period(dtstart, dtend, event_tzid) 53 fb.append((format_datetime(dtstart), 54 format_datetime(dtend), 55 get_value(details, "UID"), 56 get_value(details, "TRANSP") or "OPAQUE", 57 format_datetime(get_utc_datetime(details, "RECURRENCE-ID")) or "", 58 )) 59 break 60 61 fb.sort() 62 63 s.set_freebusy(user, fb) 64 p.set_freebusy(user, fb) 65 66 # vim: tabstop=4 expandtab shiftwidth=4