Mercurial > hg > gcmultimerge
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: |