def get_ex_event_by_uid(calendar,uid):
return calendar.get(global_object_id=GlobalObjectId(exchangelib.UID(uid)))
+def get_ex_event_by_itemid(calendar,itemid):
+ return calendar.get(item_id=itemid)
+
def get_ex_event_by_id_and_changekey(acct,itemid,changekey):
l=list(acct.fetch([(itemid,changekey)]))
return list(acct.fetch([(itemid,changekey)]))[0]
def get_ex_events(calendar):
ans={}
- itemids={}
- for event in calendar.all().only('uid','changekey','item_id','gcal_link'):
+ for event in calendar.all().only('changekey','item_id','gcal_link'):
if event.gcal_link is not None:
# event.delete()
continue
- if event.uid in ans:
- logger.warning("Event uid %s was duplicated!" % event.uid)
- ans[event.uid] = event.changekey
- itemids[event.uid] = event.item_id
+ if event.item_id in ans:
+ logger.warning("Event item_id %s was duplicated!" % event.item_id)
+ ans[event.item_id] = event.changekey
logger.info("%d events found" % len(ans))
- return (ans,itemids)
+ return ans
def ex_event_changes(old,new):
olds = set(old.keys())
def add_ex_to_gcal(ex_acct,
gcal_acct,gcal_tz,events,
- itemids,added,
+ added,
gcal_id="primary"):
for ev_id in added:
- event = get_ex_event_by_id_and_changekey(ex_acct,
- itemids[ev_id],events[ev_id])
+ event = get_ex_event_by_itemid(ex_acct.calendar,ev_id)
if event.is_all_day:
gevent={}
gevent["summary"]=event.subject
gevent=gcal_acct.events().insert(calendarId=gcal_id, body=gevent).execute()
event.gcal_link = gevent.get("id")
event.save()
- events[event.uid] = event.changekey
+ events[event.item_id] = event.changekey
else:
logger.warning("only all-day events supported")
cache = None
ex_account = ex_login("mv3@sanger.ac.uk")
- current,itemids = get_ex_events(ex_account.calendar)
+ current = get_ex_events(ex_account.calendar)
gcal_account = gcal_login()
gcal_tz = get_gcal_timezone(gcal_account)
if cache is not None:
added,deleted,changed = ex_event_changes(cache,current)
- add_ex_to_gcal(ex_account,gcal_account,gcal_tz,current,
- itemids,added)
+ add_ex_to_gcal(ex_account,gcal_account,gcal_tz,current,added)
with open(cachepath,"wb") as f:
pickle.dump(current,f)