|
|
|
@ -18,36 +18,6 @@ class weekdays(IntEnum): |
|
|
|
SAT = 5 |
|
|
|
|
|
|
|
|
|
|
|
class Calendar: |
|
|
|
"""Model for representing a Google calendar""" |
|
|
|
|
|
|
|
def __init__(self, api: calendar_api, calendar_id): |
|
|
|
self.api = api |
|
|
|
|
|
|
|
if calendar_id in api.ids.keys(): |
|
|
|
self.name = calendar_id |
|
|
|
self.calendar_id = self.api.ids[self.name] |
|
|
|
elif calendar_id in api.ids.values(): |
|
|
|
self.name = self.api.calendars[calendar_id]["summary"] |
|
|
|
self.id = calendar_id |
|
|
|
else: |
|
|
|
raise ValueError("Non-existent calendar specified") |
|
|
|
self.calendar_id = calendar_id |
|
|
|
|
|
|
|
def update_or_add_0event(self, event: Event): |
|
|
|
event.upload(self.api, self.calendar_id) |
|
|
|
|
|
|
|
def search_events(self, event_name): |
|
|
|
pass |
|
|
|
|
|
|
|
|
|
|
|
def calendar_dict(api: calendar_api): |
|
|
|
return dict( |
|
|
|
(calendar_name, Calendar(api, calendar_name)) |
|
|
|
for calendar_name in api.ids.keys() |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
class Event: |
|
|
|
"""Model for a calendar event that can be uploaded""" |
|
|
|
|
|
|
|
@ -156,5 +126,60 @@ class Event: |
|
|
|
self.id = event_id |
|
|
|
return event_id |
|
|
|
|
|
|
|
def delete(self, api: calendar_api): |
|
|
|
pass |
|
|
|
|
|
|
|
class Calendar: |
|
|
|
"""Model for representing a Google calendar""" |
|
|
|
|
|
|
|
def __init__(self, api: calendar_api, calendar_id): |
|
|
|
self.api = api |
|
|
|
|
|
|
|
if calendar_id in api.ids.keys(): |
|
|
|
self.name = calendar_id |
|
|
|
self.calendar_id = self.api.ids[self.name] |
|
|
|
elif calendar_id in api.ids.values(): |
|
|
|
self.name = self.api.calendars[calendar_id]["summary"] |
|
|
|
self.id = calendar_id |
|
|
|
else: |
|
|
|
raise ValueError("Non-existent calendar specified") |
|
|
|
self.calendar_id = calendar_id |
|
|
|
|
|
|
|
def update_or_add_event(self, event: Event): |
|
|
|
event.upload(self.api, self.calendar_id) |
|
|
|
|
|
|
|
def get_events( |
|
|
|
self, start: datetime.datetime = None, end: datetime.datetime = None |
|
|
|
): |
|
|
|
return ( |
|
|
|
Event(event_representation) |
|
|
|
for event_representation in self.api.get_events_in_range( |
|
|
|
self.cal_id, start, end |
|
|
|
) |
|
|
|
) |
|
|
|
|
|
|
|
def delete_event(self, event: Event): |
|
|
|
if event.id is not None: |
|
|
|
return self.api.delete_event(self.calendar_id, event.id) |
|
|
|
|
|
|
|
def search_events( |
|
|
|
self, event_name_regex=None, event_description_regex=None, start=None, end=None |
|
|
|
): |
|
|
|
for event in self.get_events(start, end): |
|
|
|
will_yield = False |
|
|
|
if event_name_regex is not None: |
|
|
|
will_yield = re.search(event_name_regex, Event.name) is not None |
|
|
|
|
|
|
|
if event_name_regex is not None: |
|
|
|
will_yield = ( |
|
|
|
re.search(event_description_regex, Event.description) is not None |
|
|
|
or will_yield # noqa |
|
|
|
) |
|
|
|
|
|
|
|
if will_yield: |
|
|
|
yield event |
|
|
|
|
|
|
|
|
|
|
|
def calendar_dict(api: calendar_api): |
|
|
|
return dict( |
|
|
|
(calendar_name, Calendar(api, calendar_name)) |
|
|
|
for calendar_name in api.ids.keys() |
|
|
|
) |