From: Matthew Vernon Date: Fri, 5 Oct 2018 10:06:36 +0000 (+0100) Subject: Switch to using a named tuple for the cache X-Git-Tag: v0.1~34 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~matthewv/git?a=commitdiff_plain;h=155238bf62510432aefce2a60284a5b0ee4e457a;p=gooswapper Switch to using a named tuple for the cache This lets us store more than one field per event, fairly simply. --- diff --git a/gooswapper.py b/gooswapper.py index f3b4bf1..f57318c 100644 --- a/gooswapper.py +++ b/gooswapper.py @@ -4,6 +4,7 @@ import sys import getpass import os import pickle +import collections import logging logger = logging.getLogger('gooswapper') logger.setLevel(logging.INFO) @@ -44,6 +45,9 @@ cachepath=".gooswapcache" exchange_credential = None +CachedExEvent=collections.namedtuple('CachedExEvent', + ['changekey','gcal_link']) + class ex_gcal_link(exchangelib.ExtendedProperty): distinguished_property_set_id = 'PublicStrings' property_name = "google calendar event id" @@ -74,12 +78,12 @@ def ex_login(emailaddr,autodiscover=True): def get_ex_events(calendar): ans={} for event in calendar.all().only('changekey','item_id','gcal_link'): - if event.gcal_link is not None: +# if event.gcal_link is not None: # event.delete() - continue +# continue if event.item_id in ans: logger.warning("Event item_id %s was duplicated!" % event.item_id) - ans[event.item_id] = event.changekey + ans[event.item_id] = CachedExEvent(event.changekey,event.gcal_link) logger.info("%d events found" % len(ans)) return ans @@ -91,7 +95,7 @@ def ex_event_changes(old,new): changed = [] #intersection - i.e. common to both sets for event in olds & news: - if old[event] != new[event]: + if old[event].changekey != new[event].changekey: changed.append(event) logger.info("%d events updated, %d added, %d deleted" % (len(changed), len(added), @@ -117,7 +121,7 @@ def add_ex_to_gcal(ex_acct, gevent=gcal_acct.events().insert(calendarId=gcal_id, body=gevent).execute() event.gcal_link = gevent.get("id") event.save() - events[event.item_id] = event.changekey + events[event.item_id] = events[event.item_id]._replace(changekey=event.changekey) else: logger.warning("only all-day events supported")