from typing import List from tzlocal import get_localzone_name from ._resource import Resource from .reminders import Reminder class NotificationType: """ * `EVENT_CREATION` - Notification sent when a new event is put on the calendar. * `EVENT_CHANGE` - Notification sent when an event is changed. * `EVENT_CANCELLATION` - Notification sent when an event is cancelled. * `EVENT_RESPONSE` - Notification sent when an attendee responds to the event invitation. * `AGENDA` - An agenda with the events of the day (sent out in the morning). """ EVENT_CREATION = "eventCreation" EVENT_CHANGE = "eventChange" EVENT_CANCELLATION = "eventCancellation" EVENT_RESPONSE = "eventResponse" AGENDA = "agenda" class AccessRoles: """ * `FREE_BUSY_READER` - Provides read access to free/busy information. * `READER` - Provides read access to the calendar. Private events will appear to users with reader access, but event details will be hidden. * `WRITER` - Provides read and write access to the calendar. Private events will appear to users with writer access, and event details will be visible. * `OWNER` - Provides ownership of the calendar. This role has all of the permissions of the writer role with the additional ability to see and manipulate ACLs. """ FREE_BUSY_READER = "freeBusyReader" READER = "reader" WRITER = "writer" OWNER = "owner" class Calendar(Resource): def __init__( self, summary: str, *, calendar_id: str = None, description: str = None, location: str = None, timezone: str = get_localzone_name(), allowed_conference_solution_types: List[str] = None ): """ :param summary: Title of the calendar. :param calendar_id: Identifier of the calendar. To retrieve calendar IDs call the :py:meth:`~gcsa.google_calendar.GoogleCalendar.get_calendar_list`. :param description: Description of the calendar. :param location: Geographic location of the calendar as free-form text. :param timezone: Timezone formatted as an IANA Time Zone Database name, e.g. "Europe/Zurich". By default, the computers local timezone is used if it is configured. UTC is used otherwise. :param allowed_conference_solution_types: The types of conference solutions that are supported for this calendar. See :py:class:`~gcsa.conference.SolutionType` """ self.summary = summary self.calendar_id = calendar_id self.description = description self.location = location self.timezone = timezone self.allowed_conference_solution_types = allowed_conference_solution_types @property def id(self): return self.calendar_id def to_calendar_list_entry( self, summary_override: str = None, color_id: str = None, background_color: str = None, foreground_color: str = None, hidden: bool = False, selected: bool = False, default_reminders: List[Reminder] = None, notification_types: List[str] = None, ) -> 'CalendarListEntry': """Converts :py:class:`~gcsa.calendar.Calendar` to :py:class:`~gcsa.calendar.CalendarListEntry` that can be added to the calendar list. :py:class:`~gcsa.calendar.Calendar` has to have `calendar_id` set to be converted to :py:class:`~gcsa.calendar.CalendarListEntry` :param summary_override: The summary that the authenticated user has set for this calendar. :param color_id: The color of the calendar. This is an ID referring to an entry in the calendar section of the colors' definition (See :py:meth:`~gcsa.google_calendar.GoogleCalendar.list_calendar_colors`). This property is superseded by the `background_color` and `foreground_color` properties and can be ignored when using these properties. :param background_color: The main color of the calendar in the hexadecimal format "#0088aa". This property supersedes the index-based color_id property. :param foreground_color: The foreground color of the calendar in the hexadecimal format "#ffffff". This property supersedes the index-based color_id property. :param hidden: Whether the calendar has been hidden from the list. :param selected: Whether the calendar content shows up in the calendar UI. The default is False. :param default_reminders: The default reminders that the authenticated user has for this calendar. :py:mod:`~gcsa.reminders` :param notification_types: The list of notification types set for this calendar. :py:class:`~gcsa:calendar:NotificationType` :return: :py:class:`~gcsa.calendar.CalendarListEntry` object that can be added to the calendar list. """ if self.id is None: raise ValueError('Calendar has to have `calendar_id` set to be converted to CalendarListEntry') return CalendarListEntry( _summary=self.summary, calendar_id=self.calendar_id, _description=self.description, _location=self.location, _timezone=self.timezone, _allowed_conference_solution_types=self.allowed_conference_solution_types, summary_override=summary_override, color_id=color_id, background_color=background_color, foreground_color=foreground_color, hidden=hidden, selected=selected, default_reminders=default_reminders, notification_types=notification_types, ) def __str__(self): return '{} - {}'.format(self.summary, self.description) def __repr__(self): return ''.format(self.__str__()) def __eq__(self, other): if not isinstance(other, Calendar): return NotImplemented elif self is other: return True else: return super().__eq__(other) class CalendarListEntry(Calendar): def __init__( self, calendar_id: str, *, summary_override: str = None, color_id: str = None, background_color: str = None, foreground_color: str = None, hidden: bool = False, selected: bool = False, default_reminders: List[Reminder] = None, notification_types: List[str] = None, _summary: str = None, _description: str = None, _location: str = None, _timezone: str = None, _allowed_conference_solution_types: List[str] = None, _access_role: str = None, _primary: bool = False, _deleted: bool = False ): """ :param calendar_id: Identifier of the calendar. :param summary_override: The summary that the authenticated user has set for this calendar. :param color_id: The color of the calendar. This is an ID referring to an entry in the calendar section of the colors' definition (See :py:meth:`~gcsa.google_calendar.GoogleCalendar.list_calendar_colors`). This property is superseded by the `background_color` and `foreground_color` properties and can be ignored when using these properties. :param background_color: The main color of the calendar in the hexadecimal format "#0088aa". This property supersedes the index-based color_id property. :param foreground_color: The foreground color of the calendar in the hexadecimal format "#ffffff". This property supersedes the index-based color_id property. :param hidden: Whether the calendar has been hidden from the list. :param selected: Whether the calendar content shows up in the calendar UI. The default is False. :param default_reminders: The default reminders that the authenticated user has for this calendar. :py:mod:`~gcsa.reminders` :param notification_types: The list of notification types set for this calendar. :py:class:`~gcsa:calendar:NotificationType` :param _summary: Title of the calendar. Read-only. :param _description: Description of the calendar. Read-only. :param _location: Geographic location of the calendar as free-form text. Read-only. :param _timezone: Timezone formatted as an IANA Time Zone Database name, e.g. "Europe/Zurich". Read-only. :param _allowed_conference_solution_types: The types of conference solutions that are supported for this calendar. Read-only. See :py:class:`~gcsa.conference.SolutionType` :param _access_role: The effective access role that the authenticated user has on the calendar. Read-only. See :py:class:`~gcsa.calendar.AccessRoles` :param _primary: Whether the calendar is the primary calendar of the authenticated user. Read-only. :param _deleted: Whether this calendar list entry has been deleted from the calendar list. Read-only. """ super().__init__( summary=_summary, calendar_id=calendar_id, description=_description, location=_location, timezone=_timezone, allowed_conference_solution_types=_allowed_conference_solution_types ) self.summary_override = summary_override self._color_id = color_id self.background_color = background_color self.foreground_color = foreground_color self.hidden = hidden self.selected = selected self.default_reminders = default_reminders self.notification_types = notification_types self.access_role = _access_role self.primary = _primary self.deleted = _deleted @property def color_id(self): return self._color_id @color_id.setter def color_id(self, color_id): """Sets the color_id and resets background_color and foreground_color.""" self._color_id = color_id self.background_color = None self.foreground_color = None def __str__(self): return '{} - ({})'.format(self.summary_override, self.summary) def __repr__(self): return ''.format(self.__str__()) def __eq__(self, other): if not isinstance(other, CalendarListEntry): return NotImplemented elif self is other: return True else: return super().__eq__(other)