chiark / gitweb /
Switch to using a named tuple for the cache
authorMatthew Vernon <mv3@sanger.ac.uk>
Fri, 5 Oct 2018 10:06:36 +0000 (11:06 +0100)
committerMatthew Vernon <mv3@sanger.ac.uk>
Fri, 5 Oct 2018 10:06:36 +0000 (11:06 +0100)
This lets us store more than one field per event, fairly simply.

gooswapper.py

index f3b4bf1f35c7f0bb9d803373fb713f8f64e57ad6..f57318c9f6ddd8479335f5d03721749102128d53 100644 (file)
@@ -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")