comparison multimerge.py @ 53:ea62e0ed05ae

Initial implementation of event comparision amd generally more clever about when to update events in target calendar. This makes subsequent updates faster when nothing has changed.
author Matti Hamalainen <ccr@tnsp.org>
date Tue, 05 Jul 2016 20:55:18 +0300
parents b87dbc887f63
children 86d3a8eddbd7
comparison
equal deleted inserted replaced
52:b87dbc887f63 53:ea62e0ed05ae
112 ev["gcm_id"] = re.sub("[^a-v0-9]", "0", calendar_id.lower()) + ev["id"] 112 ev["gcm_id"] = re.sub("[^a-v0-9]", "0", calendar_id.lower()) + ev["id"]
113 113
114 return events 114 return events
115 115
116 116
117 ## Find event by its gcm_id from given list or return None if not found
118 def gcm_get_event_by_gcm_id(list, id):
119 for event in list:
120 if event["gcm_id"] == id:
121 return event
122 return None
123
124
125 gcm_no_compare_fields = [u"id", u"iCalUID"]
126
127 def gcm_compare_events(ev1, ev2):
128 for field in ev1:
129 if not field in gcm_no_compare_fields and ev1[field] != ev2[field]:
130 return False
131 return True
132
133
117 ## 134 ##
118 ## Class for handling configuration / settings 135 ## Class for handling configuration / settings
119 ## 136 ##
120 class GCMSettings(dict): 137 class GCMSettings(dict):
121 def __init__(self): 138 def __init__(self):
438 # Does the event exist already in the target? 455 # Does the event exist already in the target?
439 if event["gcm_id"] in dst_gcm_ids: 456 if event["gcm_id"] in dst_gcm_ids:
440 ## Yes. Thus, we just update the event. 457 ## Yes. Thus, we just update the event.
441 #print "IS in dst_gcm_ids: "+ event["id"] +" : "+ event["gcm_id"] 458 #print "IS in dst_gcm_ids: "+ event["id"] +" : "+ event["gcm_id"]
442 # Check if event NEEDS updating .. aka compare data 459 # Check if event NEEDS updating .. aka compare data
443 #d_event = gcm_get_event_by_gcm_id(dst_events, event["gcm_id"]) 460 d_event = gcm_get_event_by_gcm_id(dst_events, event["gcm_id"])
444 #if d_event and gcm_compare_events(event, d_event): 461 if d_event and gcm_compare_events(event, d_event):
445 if True:
446 try: 462 try:
447 new_event = service.events().update(calendarId=cfg.dest_id, eventId=event["id"], body=event).execute() 463 new_event = service.events().update(calendarId=cfg.dest_id, eventId=event["id"], body=event).execute()
448 except Exception as e: 464 except Exception as e:
449 gcm_fatal("Failed to update event:\n{0}\n\nERROR: {1}\n".format(event, str(e))) 465 gcm_fatal("Failed to update event:\n{0}\n\nERROR: {1}\n".format(event, str(e)))
450 else: 466 else: