# HG changeset patch # User Matti Hamalainen # Date 1476782953 -10800 # Node ID c6771a596d77a9c66f15fb93f652d12f90c9c44d # Parent 8cf20367a372be210fee76c6c3ab3926b7d1493b Add gcm_fetch_events() function that properly implements chained event list fetching. diff -r 8cf20367a372 -r c6771a596d77 multimerge.py --- a/multimerge.py Tue Oct 18 12:25:33 2016 +0300 +++ b/multimerge.py Tue Oct 18 12:29:13 2016 +0300 @@ -160,6 +160,29 @@ return True +## Fetch events for given calendar +def gcm_fetch_events(calendarId, showDeleted): + events = [] + ev_token = None + while True: + try: + result = service.events().list( + calendarId=calendarId, + showDeleted=showDeleted, + singleEvents=False, + pageToken=ev_token, + ).execute() + except Exception as e: + gcm_fatal(u"Failed to fetch calendar events for {0}:\n\nERROR: {1}\n".format(calendarId, str(e))) + + events.extend(result.get("items", [])) + ev_token = result.get("nextPageToken") + if not ev_token: + break + + return events + + ### ### Class for parsing and manipulating RGB colors ### @@ -527,17 +550,6 @@ src_events = [] for calendar in src_calendars: gcm_debug(4, u"- {0} ({1})".format(calendar["id"], calendar["summary"])) - try: - result = service.events().list( - timeZone="EEST", - calendarId=calendar["id"], - singleEvents=False, - showDeleted=False, -# orderBy="startTime", - ).execute() - except Exception as e: - gcm_fatal(u"Failed to fetch calendar events for {0}:\n\n{1}\n\nERROR: {2}\n".format(calendar["id"], calendar, str(e))) - c_found = None if "colorId" in calendar and calendar["colorId"] in colors["calendar"]: gcm_debug(4, u" Calendar color: {0}".format(colors["calendar"][calendar["colorId"]])) @@ -548,7 +560,7 @@ gcm_debug(4, u" No matching event color found!") # Add events, if any, to main list - events = gcm_generate_ids(result.get("items", []), calendar["id"], "___") + events = gcm_generate_ids(gcm_fetch_events(calendar["id"], False), calendar["id"], "___") if events: for event in events: if event["status"] != u"cancelled": @@ -562,13 +574,7 @@ ## Get current events gcm_debug(3, u"Fetching current target calendar events.") -result = service.events().list( - calendarId=cfg.dst_id, - singleEvents=False, - showDeleted=True, - ).execute() - -dst_events = gcm_generate_ids(result.get("items", []), "", "") +dst_events = gcm_generate_ids(gcm_fetch_events(cfg.dst_id, True), "", "") gcm_debug(3, u"Found {0} event(s).".format(len(dst_events)))