.. _free_busy: Free busy ========= With `gcsa` you can retrieve the free/busy information of the calendars and groups. To do so, create a :py:class:`~gcsa.google_calendar.GoogleCalendar` instance (see :ref:`getting_started` to get your credentials): .. code-block:: python from gcsa.google_calendar import GoogleCalendar gc = GoogleCalendar() Then to retrieve a free/busy information of the calendar for the following two weeks starting now use :py:meth:`~gcsa.google_calendar.GoogleCalendar.get_free_busy`: .. code-block:: python free_busy = gc.get_free_busy() this will return a :py:class:`~gcsa.free_busy.FreeBusy` object. If only one calendar has been requested (like in the example above, only "primary" calendar's information has been requested), you can iterate over :py:class:`~gcsa.free_busy.FreeBusy` object directly: .. code-block:: python for start, end in free_busy: print(f'Busy from {start} to {end}') To request group(s) or different calendar(s) (other than one specified as default during `GoogleCalendar` creation), use `resource_ids` argument of :py:meth:`~gcsa.google_calendar.GoogleCalendar.get_free_busy`: .. code-block:: python free_busy = gc.get_free_busy('secondary_calendar_id@gmail.com') for start, end in free_busy: print(f'Busy from {start} to {end}') or .. code-block:: python free_busy = gc.get_free_busy( [ 'primary', 'secondary_calendar_id@gmail.com', 'group_id' ] ) print('Primary calendar:') for start, end in free_busy.calendars['primary']: print(f'Busy from {start} to {end}') print('Secondary calendar:') for start, end in free_busy.calendars['secondary_calendar_id@gmail.com']: print(f'Busy from {start} to {end}') print('Group info:') for calendar in free_busy.groups['group_id']: print(f'{calendar}:') for start, end in free_busy.calendars[calendar]: print(f'Busy from {start} to {end}') Some calendars or groups in the request might cause errors. By default `gcsa` will raise :py:class:`~gcsa.free_busy.FreeBusyQueryError` in case of any errors. But you can ignore them with `ignore_errors` argument: .. code-block:: python free_busy = gc.get_free_busy( resource_ids=[ 'primary', 'secondary_calendar_id@gmail.com', 'group_id' ], ignore_errors=True ) In that case, all the errors can be found in :py:class:`~gcsa.free_busy.FreeBusy`'s `groups_errors` and `calendars_errors` fields: .. code-block:: python print(free_busy.groups_errors) print(free_busy.calendars_errors)