| from typing import Union | |
| from gcsa._services.base_service import BaseService | |
| from gcsa.calendar import Calendar, CalendarListEntry | |
| from gcsa.serializers.calendar_serializer import CalendarSerializer | |
| class CalendarsService(BaseService): | |
| """Calendars management methods of the `GoogleCalendar`""" | |
| def get_calendar( | |
| self, | |
| calendar_id: str = None | |
| ) -> Calendar: | |
| """Returns the calendar with the corresponding calendar_id. | |
| :param calendar_id: | |
| Calendar identifier. Default is `default_calendar` specified in `GoogleCalendar`. | |
| To retrieve calendar IDs call the :py:meth:`~gcsa.google_calendar.GoogleCalendar.get_calendar_list`. | |
| If you want to access the primary calendar of the currently logged-in user, use the "primary" keyword. | |
| :return: | |
| The corresponding :py:class:`~gcsa.calendar.Calendar` object. | |
| """ | |
| calendar_id = calendar_id or self.default_calendar | |
| calendar_resource = self.service.calendars().get( | |
| calendarId=calendar_id | |
| ).execute() | |
| return CalendarSerializer.to_object(calendar_resource) | |
| def add_calendar( | |
| self, | |
| calendar: Calendar | |
| ): | |
| """Creates a secondary calendar. | |
| :param calendar: | |
| Calendar object. | |
| :return: | |
| Created calendar object with ID. | |
| """ | |
| body = CalendarSerializer.to_json(calendar) | |
| calendar_json = self.service.calendars().insert( | |
| body=body | |
| ).execute() | |
| return CalendarSerializer.to_object(calendar_json) | |
| def update_calendar( | |
| self, | |
| calendar: Calendar | |
| ): | |
| """Updates metadata for a calendar. | |
| :param calendar: | |
| Calendar object with set `calendar_id` | |
| :return: | |
| Updated calendar object | |
| """ | |
| calendar_id = self._get_resource_id(calendar) | |
| body = CalendarSerializer.to_json(calendar) | |
| calendar_json = self.service.calendars().update( | |
| calendarId=calendar_id, | |
| body=body | |
| ).execute() | |
| return CalendarSerializer.to_object(calendar_json) | |
| def delete_calendar( | |
| self, | |
| calendar: Union[Calendar, CalendarListEntry, str] | |
| ): | |
| """Deletes a secondary calendar. | |
| Use :py:meth:`~gcsa.google_calendar.GoogleCalendar.clear_calendar` for clearing all events on primary calendars. | |
| :param calendar: | |
| Calendar's ID or :py:class:`~gcsa.calendar.Calendar` object with set `calendar_id`. | |
| """ | |
| calendar_id = self._get_resource_id(calendar) | |
| self.service.calendars().delete(calendarId=calendar_id).execute() | |
| def clear_calendar(self): | |
| """Clears a **primary** calendar. | |
| This operation deletes all events associated with the **primary** calendar of an account. | |
| Currently, there is no way to clear a secondary calendar. | |
| You can use :py:meth:`~gcsa.google_calendar.GoogleCalendar.delete_event` method with the secondary calendar's ID | |
| to delete events from a secondary calendar. | |
| """ | |
| self.service.calendars().clear(calendarId='primary').execute() | |
| def clear(self): | |
| """Kept for back-compatibility. Use :py:meth:`~gcsa.google_calendar.GoogleCalendar.clear_calendar` instead. | |
| Clears a **primary** calendar. | |
| This operation deletes all events associated with the **primary** calendar of an account. | |
| Currently, there is no way to clear a secondary calendar. | |
| You can use :py:meth:`~gcsa.google_calendar.GoogleCalendar.delete_event` method with the secondary calendar's ID | |
| to delete events from a secondary calendar. | |
| """ | |
| self.clear_calendar() | |