faori's picture
Upload folder using huggingface_hub
550665c verified
raw
history blame
No virus
11.5 kB
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 '<Calendar {}>'.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 '<CalendarListEntry {}>'.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)