|
from typing import Iterable, Union
|
|
|
|
from gcsa._services.base_service import BaseService
|
|
from gcsa.acl import AccessControlRule
|
|
from gcsa.serializers.acl_rule_serializer import ACLRuleSerializer
|
|
|
|
|
|
class ACLService(BaseService):
|
|
"""Access Control List management methods of the `GoogleCalendar`"""
|
|
|
|
def get_acl_rules(
|
|
self,
|
|
calendar_id: str = None,
|
|
show_deleted: bool = False
|
|
) -> Iterable[AccessControlRule]:
|
|
"""Returns the rules in the access control list for the calendar.
|
|
|
|
: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.
|
|
:param show_deleted:
|
|
Whether to include deleted ACLs in the result. Deleted ACLs are represented by role equal to "none".
|
|
Deleted ACLs will always be included if syncToken is provided. Optional. The default is False.
|
|
|
|
:return:
|
|
Iterable of `AccessControlRule` objects
|
|
"""
|
|
calendar_id = calendar_id or self.default_calendar
|
|
yield from self._list_paginated(
|
|
self.service.acl().list,
|
|
serializer_cls=ACLRuleSerializer,
|
|
calendarId=calendar_id,
|
|
**{
|
|
'showDeleted': show_deleted,
|
|
}
|
|
)
|
|
|
|
def get_acl_rule(
|
|
self,
|
|
rule_id: str,
|
|
calendar_id: str = None
|
|
) -> AccessControlRule:
|
|
"""Returns an access control rule
|
|
|
|
:param rule_id:
|
|
ACL rule identifier.
|
|
: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 `AccessControlRule` object
|
|
"""
|
|
calendar_id = calendar_id or self.default_calendar
|
|
acl_rule_resource = self.service.acl().get(
|
|
calendarId=calendar_id,
|
|
ruleId=rule_id
|
|
).execute()
|
|
return ACLRuleSerializer.to_object(acl_rule_resource)
|
|
|
|
def add_acl_rule(
|
|
self,
|
|
acl_rule: AccessControlRule,
|
|
send_notifications: bool = True,
|
|
calendar_id: str = None
|
|
):
|
|
"""Adds access control rule
|
|
|
|
:param acl_rule:
|
|
AccessControlRule object.
|
|
:param send_notifications:
|
|
Whether to send notifications about the calendar sharing change. The default is True.
|
|
: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:
|
|
Created access control rule with id.
|
|
"""
|
|
calendar_id = calendar_id or self.default_calendar
|
|
body = ACLRuleSerializer.to_json(acl_rule)
|
|
acl_rule_json = self.service.acl().insert(
|
|
calendarId=calendar_id,
|
|
body=body,
|
|
sendNotifications=send_notifications
|
|
).execute()
|
|
return ACLRuleSerializer.to_object(acl_rule_json)
|
|
|
|
def update_acl_rule(
|
|
self,
|
|
acl_rule: AccessControlRule,
|
|
send_notifications: bool = True,
|
|
calendar_id: str = None
|
|
):
|
|
"""Updates given access control rule
|
|
|
|
:param acl_rule:
|
|
AccessControlRule object.
|
|
:param send_notifications:
|
|
Whether to send notifications about the calendar sharing change. The default is True.
|
|
: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:
|
|
Updated access control rule.
|
|
"""
|
|
calendar_id = calendar_id or self.default_calendar
|
|
acl_id = self._get_resource_id(acl_rule)
|
|
body = ACLRuleSerializer.to_json(acl_rule)
|
|
acl_json = self.service.acl().update(
|
|
calendarId=calendar_id,
|
|
ruleId=acl_id,
|
|
body=body,
|
|
sendNotifications=send_notifications
|
|
).execute()
|
|
return ACLRuleSerializer.to_object(acl_json)
|
|
|
|
def delete_acl_rule(
|
|
self,
|
|
acl_rule: Union[AccessControlRule, str],
|
|
calendar_id: str = None
|
|
):
|
|
"""Deletes access control rule.
|
|
|
|
:param acl_rule:
|
|
Access control rule's ID or `AccessControlRule` object with set `acl_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.
|
|
"""
|
|
calendar_id = calendar_id or self.default_calendar
|
|
acl_id = self._get_resource_id(acl_rule)
|
|
|
|
self.service.acl().delete(
|
|
calendarId=calendar_id,
|
|
ruleId=acl_id
|
|
).execute()
|
|
|