faori's picture
Upload folder using huggingface_hub
550665c verified
from typing import Callable, Type, Union
from gcsa._resource import Resource
from gcsa._services.authentication import AuthenticatedService
class BaseService(AuthenticatedService):
def __init__(self, default_calendar, *args, **kwargs):
"""
:param default_calendar:
Users email address or name/id of the calendar. Default: primary calendar of the user
If user's email or "primary" is specified, then primary calendar of the user is used.
You don't need to specify this parameter in this case as it is a default behaviour.
To use a different calendar you need to specify its id.
Go to calendar's `settings and sharing` -> `Integrate calendar` -> `Calendar ID`.
"""
super().__init__(*args, **kwargs)
self.default_calendar = default_calendar
@staticmethod
def _list_paginated(
request_method: Callable,
serializer_cls: Type = None,
**kwargs
):
page_token = None
while True:
response_json = request_method(
**kwargs,
pageToken=page_token
).execute()
for item_json in response_json['items']:
if serializer_cls:
yield serializer_cls(item_json).get_object()
else:
yield item_json
page_token = response_json.get('nextPageToken')
if not page_token:
break
@staticmethod
def _get_resource_id(resource: Union[Resource, str]):
"""If `resource` is `Resource` returns its id.
If `resource` is string, returns `resource` itself.
:raises:
ValueError: if `resource` is `Resource` object that doesn't have id
TypeError: if `resource` is neither `Resource` nor `str`
"""
if isinstance(resource, Resource):
if resource.id is None:
raise ValueError("Resource has to have id to be updated, moved or deleted.")
return resource.id
elif isinstance(resource, str):
return resource
else:
raise TypeError('"resource" object must be Resource or str, not {!r}'.format(
resource.__class__.__name__
))