1
0
mirror of https://github.com/b4tman/sync_ics2gcal synced 2025-02-01 12:28:29 +00:00

rewrite callback for batch requests

This commit is contained in:
Dmitry Belyaev 2018-04-11 15:41:08 +03:00
parent c34b4cdb21
commit 87a8deafed
Signed by: b4tman
GPG Key ID: 014E87EC54B77673

View File

@ -29,6 +29,24 @@ class GoogleCalendarService():
return service return service
def select_event_key(event):
"""select event key for logging
Arguments:
event -- event resource
Returns:
key name or None if no key found
"""
key = None
if 'iCalUID' in event:
key = 'iCalUID'
elif 'id' in event:
key = 'id'
return key
class GoogleCalendar(): class GoogleCalendar():
"""class to interact with calendar on google """class to interact with calendar on google
""" """
@ -39,6 +57,33 @@ class GoogleCalendar():
self.service = service self.service = service
self.calendarId = calendarId self.calendarId = calendarId
def _make_request_callback(self, action, events_by_req):
"""make callback for log result of batch request
Arguments:
action -- action name
events_by_req -- list of events ordered by request id
Returns:
callback function
"""
def callback(request_id, response, exception):
event = events_by_req[int(request_id)]
key = select_event_key(event)
if exception is not None:
self.logger.error('failed to %s event with %s: %s, exception: %s',
action, key, event.get(key), str(exception))
else:
resp_key = select_event_key(response)
if resp_key is not None:
event = response
key = resp_key
self.logger.info('event %s ok, %s: %s',
action, key, event.get(key))
return callback
def list_events_from(self, start): def list_events_from(self, start):
""" list events from calendar, where start date >= start """ list events from calendar, where start date >= start
""" """
@ -110,15 +155,7 @@ class GoogleCalendar():
fields = 'id' fields = 'id'
events_by_req = [] events_by_req = []
def insert_callback(request_id, response, exception): insert_callback = self._make_request_callback('insert', events_by_req)
if exception is not None:
event = events_by_req[int(request_id)]
self.logger.error('failed to insert event with UID: %s, exception: %s', event.get(
'UID'), str(exception))
else:
event = response
self.logger.info('event created, id: %s', event.get('id'))
batch = self.service.new_batch_http_request(callback=insert_callback) batch = self.service.new_batch_http_request(callback=insert_callback)
i = 0 i = 0
for event in events: for event in events:
@ -138,15 +175,7 @@ class GoogleCalendar():
fields = 'id' fields = 'id'
events_by_req = [] events_by_req = []
def patch_callback(request_id, response, exception): patch_callback = self._make_request_callback('patch', events_by_req)
if exception is not None:
event = events_by_req[int(request_id)]
self.logger.error('failed to patch event with UID: %s, exception: %s', event.get(
'UID'), str(exception))
else:
event = response
self.logger.info('event patched, id: %s', event.get('id'))
batch = self.service.new_batch_http_request(callback=patch_callback) batch = self.service.new_batch_http_request(callback=patch_callback)
i = 0 i = 0
for event_new, event_old in event_tuples: for event_new, event_old in event_tuples:
@ -168,15 +197,7 @@ class GoogleCalendar():
fields = 'id' fields = 'id'
events_by_req = [] events_by_req = []
def update_callback(request_id, response, exception): update_callback = self._make_request_callback('update', events_by_req)
if exception is not None:
event = events_by_req[int(request_id)]
self.logger.error('failed to update event with UID: %s, exception: %s', event.get(
'UID'), str(exception))
else:
event = response
self.logger.info('event updated, id: %s', event.get('id'))
batch = self.service.new_batch_http_request(callback=update_callback) batch = self.service.new_batch_http_request(callback=update_callback)
i = 0 i = 0
for event_new, event_old in event_tuples: for event_new, event_old in event_tuples:
@ -197,14 +218,7 @@ class GoogleCalendar():
events_by_req = [] events_by_req = []
def delete_callback(request_id, _, exception): delete_callback = self._make_request_callback('delete', events_by_req)
event = events_by_req[int(request_id)]
if exception is not None:
self.logger.error('failed to delete event with UID: %s, exception: %s', event.get(
'UID'), str(exception))
else:
self.logger.info('event deleted, id: %s', event.get('id'))
batch = self.service.new_batch_http_request(callback=delete_callback) batch = self.service.new_batch_http_request(callback=delete_callback)
i = 0 i = 0
for event in events: for event in events:
@ -216,10 +230,10 @@ class GoogleCalendar():
def create(self, summary, timeZone=None): def create(self, summary, timeZone=None):
"""create calendar """create calendar
Arguments: Arguments:
summary -- new calendar summary summary -- new calendar summary
Keyword Arguments: Keyword Arguments:
timeZone -- new calendar timezone as string (optional) timeZone -- new calendar timezone as string (optional)