1
0
mirror of https://github.com/b4tman/sync_ics2gcal synced 2026-08-26 10:42:55 +03:00

Format with black.

This commit is contained in:
Glenn Waters
2022-03-08 10:46:21 -05:00
parent 2372103807
commit 70278c1542
10 changed files with 507 additions and 328 deletions
+43 -42
View File
@@ -11,10 +11,9 @@ from .ical import CalendarConverter, DateDateTime
class CalendarSync:
"""class for synchronize calendar with Google
"""
"""class for synchronize calendar with Google"""
logger = logging.getLogger('CalendarSync')
logger = logging.getLogger("CalendarSync")
def __init__(self, gcalendar: GoogleCalendar, converter: CalendarConverter):
self.gcalendar: GoogleCalendar = gcalendar
@@ -24,11 +23,10 @@ class CalendarSync:
self.to_delete: EventList = []
@staticmethod
def _events_list_compare(items_src: EventList,
items_dst: EventList,
key: str = 'iCalUID') \
-> Tuple[EventList, List[EventTuple], EventList]:
""" compare list of events by key
def _events_list_compare(
items_src: EventList, items_dst: EventList, key: str = "iCalUID"
) -> Tuple[EventList, List[EventTuple], EventList]:
"""compare list of events by key
Arguments:
items_src {list of dict} -- source events
@@ -41,7 +39,8 @@ class CalendarSync:
items_to_delete)
"""
def get_key(item: EventData) -> str: return item[key]
def get_key(item: EventData) -> str:
return item[key]
keys_src: Set[str] = set(map(get_key, items_src))
keys_dst: Set[str] = set(map(get_key, items_dst))
@@ -50,9 +49,7 @@ class CalendarSync:
keys_to_update = keys_src & keys_dst
keys_to_delete = keys_dst - keys_src
def items_by_keys(items: EventList,
key_name: str,
keys: Set[str]) -> EventList:
def items_by_keys(items: EventList, key_name: str, keys: Set[str]) -> EventList:
return list(filter(lambda item: item[key_name] in keys, items))
items_to_insert = items_by_keys(items_src, key, keys_to_insert)
@@ -67,25 +64,25 @@ class CalendarSync:
return items_to_insert, items_to_update, items_to_delete
def _filter_events_to_update(self):
""" filter 'to_update' events by 'updated' datetime
"""
"""filter 'to_update' events by 'updated' datetime"""
def filter_updated(event_tuple: EventTuple) -> bool:
new, old = event_tuple
if 'updated' not in new or 'updated' not in old:
if "updated" not in new or "updated" not in old:
return True
new_date = dateutil.parser.parse(new['updated'])
old_date = dateutil.parser.parse(old['updated'])
new_date = dateutil.parser.parse(new["updated"])
old_date = dateutil.parser.parse(old["updated"])
return new_date > old_date
self.to_update = list(filter(filter_updated, self.to_update))
@staticmethod
def _filter_events_by_date(events: EventList,
date: DateDateTime,
op: Callable[[DateDateTime,
DateDateTime], bool]) -> EventList:
""" filter events by start datetime
def _filter_events_by_date(
events: EventList,
date: DateDateTime,
op: Callable[[DateDateTime, DateDateTime], bool],
) -> EventList:
"""filter events by start datetime
Arguments:
events -- events list
@@ -98,21 +95,22 @@ class CalendarSync:
def filter_by_date(event: EventData) -> bool:
date_cmp = date
event_start: Dict[str, str] = event['start']
event_start: Dict[str, str] = event["start"]
event_date: Union[DateDateTime, str, None] = None
compare_dates = False
if 'date' in event_start:
event_date = event_start['date']
if "date" in event_start:
event_date = event_start["date"]
compare_dates = True
elif 'dateTime' in event_start:
event_date = event_start['dateTime']
elif "dateTime" in event_start:
event_date = event_start["dateTime"]
event_date = dateutil.parser.parse(event_date)
if compare_dates:
date_cmp = datetime.date(date.year, date.month, date.day)
event_date = datetime.date(
event_date.year, event_date.month, event_date.day)
event_date.year, event_date.month, event_date.day
)
return op(event_date, date_cmp)
@@ -149,44 +147,47 @@ class CalendarSync:
# divide source events by start datetime
events_src_pending = CalendarSync._filter_events_by_date(
events_src, start_date, operator.ge)
events_src, start_date, operator.ge
)
events_src_past = CalendarSync._filter_events_by_date(
events_src, start_date, operator.lt)
events_src, start_date, operator.lt
)
# first events comparison
self.to_insert, self.to_update, self.to_delete = CalendarSync._events_list_compare(
events_src_pending, events_dst)
(
self.to_insert,
self.to_update,
self.to_delete,
) = CalendarSync._events_list_compare(events_src_pending, events_dst)
# find in events 'to_delete' past events from source, for update (move to past)
_, add_to_update, self.to_delete = CalendarSync._events_list_compare(
events_src_past, self.to_delete)
events_src_past, self.to_delete
)
self.to_update.extend(add_to_update)
# find if events 'to_insert' exists in gcalendar, for update them
add_to_update, self.to_insert = self.gcalendar.find_exists(
self.to_insert)
add_to_update, self.to_insert = self.gcalendar.find_exists(self.to_insert)
self.to_update.extend(add_to_update)
# exclude outdated events from 'to_update' list, by 'updated' field
self._filter_events_to_update()
self.logger.info(
'prepared to sync: ( insert: %d, update: %d, delete: %d )',
"prepared to sync: ( insert: %d, update: %d, delete: %d )",
len(self.to_insert),
len(self.to_update),
len(self.to_delete)
len(self.to_delete),
)
def clear(self) -> None:
""" clear prepared sync lists (insert, update, delete)
"""
"""clear prepared sync lists (insert, update, delete)"""
self.to_insert.clear()
self.to_update.clear()
self.to_delete.clear()
def apply(self) -> None:
""" apply sync (insert, update, delete), using prepared lists of events
"""
"""apply sync (insert, update, delete), using prepared lists of events"""
self.gcalendar.insert_events(self.to_insert)
self.gcalendar.update_events(self.to_update)
@@ -194,4 +195,4 @@ class CalendarSync:
self.clear()
self.logger.info('sync done')
self.logger.info("sync done")