faori's picture
Upload folder using huggingface_hub
550665c verified
raw
history blame
18.7 kB
Serializers
===========
The library implements the JSON serializers for all available Google Calendar objects. JSON format is as specified in
the `official API documentation`_. In general, you won't need to use them, ``gcsa`` serializes everything as needed
under the hood. It is documented just so you know they exist and can be used if necessary.
.. note::
Note that serializers' ``to_json`` methods ignore read-only fields of the objects.
Read-only fields of the objects are ones that are passed to the parameters of their ``__init__`` with
underscores, e.g. ``Event(_updated=25/Nov/2020)``.
Events serializer
~~~~~~~~~~~~~~~~~
To json
-------
.. code-block:: python
from gcsa.event import Event
from gcsa.serializers.event_serializer import EventSerializer
event = Event(
'Meeting',
start=(22 / Nov / 2020)[18:00]
)
EventSerializer.to_json(event)
.. code-block:: javascript
{
'summary': 'Meeting',
'start': {
'dateTime': '2020-11-22T18:00:00+01:00',
'timeZone': 'Europe/Prague'
},
'end': {
'dateTime': '2020-11-22T19:00:00+01:00',
'timeZone': 'Europe/Prague'
},
'attachments': [],
'attendees': [],
'recurrence': [],
'reminders': {'useDefault': False},
'visibility': 'default'
}
To object
---------
.. code-block:: python
event_json = {
'start': {
'dateTime': '2020-11-22T18:00:00+01:00',
'timeZone': 'Europe/Prague'
},
'end': {
'dateTime': '2020-11-22T19:00:00+01:00',
'timeZone': 'Europe/Prague'
},
'attachments': [],
'attendees': [],
'recurrence': [],
'reminders': {'useDefault': False},
'summary': 'Meeting',
'visibility': 'default'
}
EventSerializer.to_object(event_json)
.. code-block:: python
<Event 2020-11-22 18:00:00+01:00 - Meeting>
Attachments serializer
~~~~~~~~~~~~~~~~~~~~~~
To json
-------
.. code-block:: python
from gcsa.attachment import Attachment
from gcsa.serializers.attachment_serializer import AttachmentSerializer
attachment = Attachment(
file_url='https://bit.ly/3lZo0Cc',
title='My file',
mime_type='application/vnd.google-apps.document'
)
AttachmentSerializer.to_json(attachment)
.. code-block:: javascript
{
'title': 'My file',
'fileUrl': 'https://bit.ly/3lZo0Cc',
'mimeType': 'application/vnd.google-apps.document'
}
To object
---------
.. code-block:: python
attachment_json = {
'fileUrl': 'https://bit.ly/3lZo0Cc',
'mimeType': 'application/vnd.google-apps.document',
'title': 'My file'
}
AttachmentSerializer.to_object(attachment_json)
.. code-block:: python
<Attachment 'My file' - 'https://bit.ly/3lZo0Cc'>
Person serializer
~~~~~~~~~~~~~~~~~
To json
-------
.. code-block:: python
from gcsa.person import Person
from gcsa.serializers.person_serializer import PersonSerializer
person = Person(
'[email protected]',
display_name='BFF',
)
PersonSerializer.to_json(person)
.. code-block:: javascript
{
'email': '[email protected]'
'displayName': 'BFF',
}
To object
---------
.. code-block:: python
person_json = {
'email': '[email protected]',
'displayName': 'BFF',
'id': '123123',
'self': True
}
PersonSerializer.to_object(person_json)
.. code-block:: python
<Person '[email protected]' - 'BFF'>
Attendees serializer
~~~~~~~~~~~~~~~~~~~~
To json
-------
.. code-block:: python
from gcsa.attendee import Attendee
from gcsa.serializers.attendee_serializer import AttendeeSerializer
attendee = Attendee(
'[email protected]',
display_name='BFF',
additional_guests=2
)
AttendeeSerializer.to_json(attendee)
.. code-block:: javascript
{
'email': '[email protected]'
'displayName': 'BFF',
'additionalGuests': 2,
}
To object
---------
.. code-block:: python
attendee_json = {
'email': '[email protected]',
'displayName': 'BFF',
'additionalGuests': 2,
'responseStatus': 'needsAction'
}
AttendeeSerializer.to_object(attendee_json)
.. code-block:: python
<Attendee '[email protected]' - response: 'needsAction'>
Conference serializer
~~~~~~~~~~~~~~~~~~~~~
EntryPoint
----------
To json
*******
.. code-block:: python
from gcsa.conference import EntryPoint
from gcsa.serializers.conference_serializer import EntryPointSerializer
entry_point = EntryPoint(
EntryPoint.VIDEO,
uri='https://meet.google.com/aaa-bbbb-ccc'
)
EntryPointSerializer.to_json(entry_point)
.. code-block:: javascript
{
'entryPointType': 'video',
'uri': 'https://meet.google.com/aaa-bbbb-ccc'
}
To object
*********
.. code-block:: python
entry_point_json = {
'entryPointType': 'video',
'uri': 'https://meet.google.com/aaa-bbbb-ccc'
}
EntryPointSerializer.to_object(entry_point_json)
.. code-block:: python
<EntryPoint video - 'https://meet.google.com/aaa-bbbb-ccc'>
ConferenceSolution
------------------
To json
*******
.. code-block:: python
from gcsa.conference import ConferenceSolution, EntryPoint, SolutionType
from gcsa.serializers.conference_serializer import ConferenceSolutionSerializer
conference_solution = ConferenceSolution(
entry_points=EntryPoint(
EntryPoint.VIDEO,
uri='https://meet.google.com/aaa-bbbb-ccc'
),
solution_type=SolutionType.HANGOUTS_MEET,
)
ConferenceSolutionSerializer.to_json(conference_solution)
.. code-block:: javascript
{
'conferenceSolution': {
'key': {
'type': 'hangoutsMeet'
}
},
'entryPoints': [
{
'entryPointType': 'video',
'uri': 'https://meet.google.com/aaa-bbbb-ccc'
}
]
}
To object
*********
.. code-block:: python
conference_solution_json = {
'conferenceSolution': {
'key': {
'type': 'hangoutsMeet'
}
},
'entryPoints': [
{
'entryPointType': 'video',
'uri': 'https://meet.google.com/aaa-bbbb-ccc'
}
]
}
ConferenceSolutionSerializer.to_object(conference_solution_json)
.. code-block:: python
<ConferenceSolution hangoutsMeet - [<EntryPoint video - 'https://meet.google.com/aaa-bbbb-ccc'>]>
ConferenceSolutionCreateRequest
-------------------------------
To json
*******
.. code-block:: python
from gcsa.conference import ConferenceSolutionCreateRequest, SolutionType
from gcsa.serializers.conference_serializer import ConferenceSolutionCreateRequestSerializer
conference_solution_create_request = ConferenceSolutionCreateRequest(
solution_type=SolutionType.HANGOUTS_MEET,
)
ConferenceSolutionCreateRequestSerializer.to_json(conference_solution_create_request)
.. code-block:: javascript
{
'createRequest': {
'conferenceSolutionKey': {
'type': 'hangoutsMeet'
},
'requestId': '30b8e7c4d595445aa73c3feccf4b4f06'
}
}
To object
*********
.. code-block:: python
conference_solution_create_request_json = {
'createRequest': {
'conferenceSolutionKey': {
'type': 'hangoutsMeet'
},
'requestId': '30b8e7c4d595445aa73c3feccf4b4f06',
'status': {
'statusCode': 'pending'
}
}
}
ConferenceSolutionCreateRequestSerializer.to_object(conference_solution_create_request_json)
.. code-block:: python
<ConferenceSolutionCreateRequest hangoutsMeet - status:'pending'>
Reminders serializer
~~~~~~~~~~~~~~~~~~~~
To json
-------
.. code-block:: python
from gcsa.reminders import EmailReminder, PopupReminder
from gcsa.serializers.reminder_serializer import ReminderSerializer
reminder = EmailReminder(minutes_before_start=30)
ReminderSerializer.to_json(reminder)
.. code-block:: javascript
{
'method': 'email',
'minutes': 30
}
.. code-block:: python
reminder = PopupReminder(minutes_before_start=30)
ReminderSerializer.to_json(reminder)
.. code-block:: javascript
{
'method': 'popup',
'minutes': 30
}
To object
---------
.. code-block:: python
reminder_json = {
'method': 'email',
'minutes': 30
}
ReminderSerializer.to_object(reminder_json)
.. code-block:: python
<EmailReminder - minutes_before_start:30>
.. code-block:: python
reminder_json = {
'method': 'popup',
'minutes': 30
}
ReminderSerializer.to_object(reminder_json)
.. code-block:: python
<PopupReminder - minutes_before_start:30>
Calendars serializer
~~~~~~~~~~~~~~~~~~~~
To json
-------
.. code-block:: python
from gcsa.calendar import Calendar, AccessRoles
from gcsa.serializers.calendar_serializer import CalendarSerializer
calendar = Calendar(
summary='Primary',
calendar_id='primary',
description='Description',
location='Location',
timezone='Timezone',
allowed_conference_solution_types=[
AccessRoles.FREE_BUSY_READER,
AccessRoles.READER,
AccessRoles.WRITER,
AccessRoles.OWNER,
]
)
CalendarSerializer.to_json(calendar)
.. code-block:: javascript
{
'id': 'primary',
'summary': 'Primary',
'description': 'Description',
'location': 'Location',
'timeZone': 'Timezone',
'conferenceProperties': {
'allowedConferenceSolutionTypes': [
'freeBusyReader',
'reader',
'writer',
'owner'
]
}
}
To object
---------
.. code-block:: python
calendar_json = {
'id': 'primary',
'summary': 'Primary',
'description': 'Description',
'location': 'Location',
'timeZone': 'Timezone',
'conferenceProperties': {
'allowedConferenceSolutionTypes': [
'freeBusyReader',
'reader',
'writer',
'owner'
]
}
}
CalendarSerializer.to_object(calendar_json)
.. code-block:: python
<Calendar Primary - Description>
CalendarListEntry serializer
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
To json
-------
.. code-block:: python
from gcsa.calendar import CalendarListEntry, NotificationType
from gcsa.reminders import EmailReminder
from gcsa.serializers.calendar_serializer import CalendarListEntrySerializer
calendar_list_entry = CalendarListEntry(
calendar_id='<calendar_id>',
summary_override='Holidays in Czechia 2022',
color_id='2',
background_color='#123456',
foreground_color='#234567',
hidden=True,
selected=False,
default_reminders=[EmailReminder(minutes_before_start=15)],
notification_types=[
NotificationType.EVENT_CREATION,
NotificationType.EVENT_CHANGE
]
)
CalendarListEntrySerializer.to_json(calendar_list_entry)
.. code-block:: javascript
{
'id': '<calendar_id>',
'summaryOverride': 'Holidays in Czechia 2022',
'colorId': '2',
'backgroundColor': '#123456',
'foregroundColor': '#234567',
'hidden': True,
'selected': False,
'defaultReminders': [
{'method': 'email', 'minutes': 15}
],
'notificationSettings': {
'notifications': [
{'type': 'eventCreation', 'method': 'email'},
{'type': 'eventChange', 'method': 'email'}
]
}
}
To object
---------
.. code-block:: python
calendar_list_entry_json = {
'id': '<calendar_id>',
'summary': 'Státní svátky v ČR',
'summaryOverride': 'Holidays in Czechia 2022',
'colorId': '2',
'backgroundColor': '#123456',
'foregroundColor': '#234567',
'hidden': True,
'selected': False,
'defaultReminders': [
{'method': 'email', 'minutes': 15}
],
'notificationSettings': {
'notifications': [
{'type': 'eventCreation', 'method': 'email'},
{'type': 'eventChange', 'method': 'email'}
]
}
}
CalendarListEntrySerializer.to_object(calendar_list_entry_json)
.. code-block:: python
<CalendarListEntry Holidays in Czechia 2022 - (Státní svátky v ČR)>
Access control rule serializer
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
To json
-------
.. code-block:: python
from gcsa.acl import AccessControlRule, ACLRole, ACLScopeType
from gcsa.serializers.acl_rule_serializer import ACLRuleSerializer
rule = AccessControlRule(
role=ACLRole.READER,
scope_type=ACLScopeType.USER,
scope_value='[email protected]',
)
ACLRuleSerializer.to_json(rule)
.. code-block:: javascript
{
'role': 'reader',
'scope': {
'type': 'user',
'value': '[email protected]'
}
}
To object
---------
.. code-block:: python
acl_rule_json = {
'role': 'reader',
'scope': {
'type': 'user',
'value': '[email protected]'
},
'id': 'user:[email protected]'
}
ACLRuleSerializer.to_object(acl_rule_json)
.. code-block:: python
<AccessControlRule [email protected] - reader>
FreeBusy serializer
~~~~~~~~~~~~~~~~~~~
To json
-------
.. code-block:: python
from gcsa.free_busy import FreeBusy, TimeRange
from gcsa.serializers.free_busy_serializer import FreeBusySerializer
free_busy = FreeBusy(
time_min=(24 / Mar / 2023)[13:22],
time_max=(25 / Mar / 2023)[13:22],
groups={'group1': ['calendar1', 'calendar2']},
calendars={
'calendar1': [
TimeRange((24 / Mar / 2023)[14:22], (24 / Mar / 2023)[15:22]),
TimeRange((24 / Mar / 2023)[17:22], (24 / Mar / 2023)[18:22]),
],
'calendar2': [
TimeRange((24 / Mar / 2023)[15:22], (24 / Mar / 2023)[16:22]),
TimeRange((24 / Mar / 2023)[18:22], (24 / Mar / 2023)[19:22]),
]
},
groups_errors={
"non-existing-group": [
{
"domain": "global",
"reason": "notFound"
}
]
},
calendars_errors={
"non-existing-calendar": [
{
"domain": "global",
"reason": "notFound"
}
]
}
)
FreeBusySerializer.to_json(free_busy)
.. code-block:: javascript
{
'calendars': {
'calendar1': {
'busy': [
{'start': '2023-03-24T14:22:00', 'end': '2023-03-24T15:22:00'},
{'start': '2023-03-24T17:22:00', 'end': '2023-03-24T18:22:00'}
],
'errors': []
},
'calendar2': {
'busy': [
{'start': '2023-03-24T15:22:00', 'end': '2023-03-24T16:22:00'},
{'start': '2023-03-24T18:22:00', 'end': '2023-03-24T19:22:00'}
],
'errors': []
},
'non-existing-calendar': {
'busy': [],
'errors': [
{'domain': 'global', 'reason': 'notFound'}
]
}
},
'groups': {
'group1': {
'calendars': ['calendar1', 'calendar2'],
'errors': []
},
'non-existing-group': {
'calendars': [],
'errors': [
{'domain': 'global', 'reason': 'notFound'}
]
}
},
'timeMin': '2023-03-24T13:22:00',
'timeMax': '2023-03-25T13:22:00'
}
To object
---------
.. code-block:: python
free_busy_json = {
'calendars': {
'calendar1': {
'busy': [
{'start': '2023-03-24T14:22:00', 'end': '2023-03-24T15:22:00'},
{'start': '2023-03-24T17:22:00', 'end': '2023-03-24T18:22:00'}
],
'errors': []
},
'calendar2': {
'busy': [
{'start': '2023-03-24T15:22:00', 'end': '2023-03-24T16:22:00'},
{'start': '2023-03-24T18:22:00', 'end': '2023-03-24T19:22:00'}
],
'errors': []
},
'non-existing-calendar': {
'busy': [],
'errors': [
{'domain': 'global', 'reason': 'notFound'}
]
}
},
'groups': {
'group1': {
'calendars': ['calendar1', 'calendar2'],
'errors': []
},
'non-existing-group': {
'calendars': [],
'errors': [
{'domain': 'global', 'reason': 'notFound'}
]
}
},
'timeMin': '2023-03-24T13:22:00',
'timeMax': '2023-03-25T13:22:00'
}
FreeBusySerializer.to_object(free_busy_json)
.. code-block:: python
<FreeBusy 2023-03-24 13:22:00 - 2023-03-25 13:22:00>
.. _`official API documentation`: https://developers.google.com/calendar