faori's picture
Upload folder using huggingface_hub
550665c verified
raw
history blame
4.5 kB
from gcsa.calendar import Calendar, CalendarListEntry
from .base_serializer import BaseSerializer
from .reminder_serializer import ReminderSerializer
class CalendarSerializer(BaseSerializer):
type_ = Calendar
def __init__(self, calendar):
super().__init__(calendar)
@staticmethod
def _to_json(calendar: Calendar):
data = {
"id": calendar.calendar_id,
"summary": calendar.summary,
"description": calendar.description,
"location": calendar.location,
"timeZone": calendar.timezone,
}
if calendar.allowed_conference_solution_types:
data["conferenceProperties"] = {
"allowedConferenceSolutionTypes": calendar.allowed_conference_solution_types
}
data = CalendarSerializer._remove_empty_values(data)
return data
@staticmethod
def _to_object(json_calendar):
conference_properties = json_calendar.get('conferenceProperties', {})
allowed_conference_solution_types = conference_properties.get('allowedConferenceSolutionTypes')
return Calendar(
summary=json_calendar.get('summary'),
calendar_id=json_calendar.get('id'),
description=json_calendar.get('description'),
location=json_calendar.get('location'),
timezone=json_calendar.get('timeZone'),
allowed_conference_solution_types=allowed_conference_solution_types
)
class CalendarListEntrySerializer(BaseSerializer):
type_ = CalendarListEntry
def __init__(self, calendar_list_entry):
super().__init__(calendar_list_entry)
@staticmethod
def _to_json(calendar: CalendarListEntry):
data = {
"id": calendar.calendar_id,
"summaryOverride": calendar.summary_override,
"colorId": calendar.color_id,
"backgroundColor": calendar.background_color,
"foregroundColor": calendar.foreground_color,
"hidden": calendar.hidden,
"selected": calendar.selected,
}
if calendar.default_reminders:
data["defaultReminders"] = [ReminderSerializer.to_json(r) for r in calendar.default_reminders]
if calendar.notification_types:
data["notificationSettings"] = {
"notifications": [
{
"type": notification_type,
"method": "email"
}
for notification_type in calendar.notification_types
]
}
data = CalendarListEntrySerializer._remove_empty_values(data)
return data
@staticmethod
def _to_object(json_calendar):
conference_properties = json_calendar.pop('conferenceProperties', {})
allowed_conference_solution_types = conference_properties.pop('allowedConferenceSolutionTypes', None)
reminders_json = json_calendar.pop('defaultReminders', [])
default_reminders = [ReminderSerializer.to_object(r) for r in reminders_json] if reminders_json else None
notifications = json_calendar.pop('notificationSettings', {}).pop('notifications', None)
notification_types = [n['type'] for n in notifications] if notifications else None
return CalendarListEntry(
calendar_id=json_calendar.pop('id'),
summary_override=json_calendar.pop('summaryOverride', None),
color_id=json_calendar.pop('colorId', None),
background_color=json_calendar.pop('backgroundColor', None),
foreground_color=json_calendar.pop('foregroundColor', None),
hidden=json_calendar.pop('hidden', False),
selected=json_calendar.pop('selected', False),
default_reminders=default_reminders,
notification_types=notification_types,
_summary=json_calendar.pop('summary', None),
_description=json_calendar.pop('description', None),
_location=json_calendar.pop('location', None),
_timezone=json_calendar.pop('timeZone', None),
_allowed_conference_solution_types=allowed_conference_solution_types,
_access_role=json_calendar.pop('accessRole', None),
_primary=json_calendar.pop('primary', False),
_deleted=json_calendar.pop('deleted', False)
)