Календарь Обновления событий от гостя (с guestCanModify) не отправляются - PullRequest
0 голосов
/ 24 апреля 2020

Я пытаюсь разрешить гостю события календаря обновляться (сводка в моем примере). Это не работает, даже используя то, что говорят документы (то есть, создавая событие с 'guestCanModify': True, или используя sendUpdates = 'all'). В конце концов я пытаюсь сделать так, чтобы какой-то обычный пользователь gmail создал событие, а некоторые целевые пользователи GSuite приняли его и отредактировали / добавили ссылку на Google Meet. Я сейчас только проверяю способность гостя изменить исходное резюме. Вот мой код (который я видел случайно работающим, это связано с форсированием события отправки или что-то еще?):

import sys
import datetime
import pickle
import os.path
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request

SCOPES = ['https://www.googleapis.com/auth/calendar',
          'https://www.googleapis.com/auth/userinfo.email',
          'openid']

def check_creds(token_file):
    creds = None
    print('building %s'%token_file)
    if os.path.exists(token_file):
        with open(token_file, 'rb') as token:
            creds = pickle.load(token)
    # If there are no (valid) credentials available, let the user log in.
    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            creds.refresh(Request())
        else:
            flow = InstalledAppFlow.from_client_secrets_file(
                'client_secret.json', SCOPES)
            creds = flow.run_local_server(port=8080)
        # Save the credentials for the next run
        with open(token_file, 'wb') as token:
            pickle.dump(creds, token)
    return creds

def main():
    host_service = guest_service = None
    host_token = 'host_atGMAIL_token_new.pickle'
    guest_token = 'guest_atSWM_token_new.pickle'
    host_email = 'kpoman@gmail.com'
    guest_email = 'kpoman@safewebmed.com.br'

    # load meeting host credentials and create API service
    host_creds = check_creds(host_token)
    host_service = build('calendar', 'v3', credentials=host_creds)
    print('host_service:', host_service)

    guest_creds = check_creds(guest_token)
    guest_service = build('calendar', 'v3', credentials=guest_creds)
    print('guest_service:', guest_service)

    if not (host_service and guest_service):
        sys.exit('could not create services')

    original_summary = 'Initial summary'

    # host creates an event
    now = datetime.datetime.utcnow().isoformat() + 'Z' # 'Z' indicates UTC time
    in_an_hour = '2020-05-01T09:00:00-03:00'
    in_two_hours = '2020-05-01T10:00:00-03:00'
    print('Creating a host event')
    event = {
        'summary': original_summary,
        'start': {
            'dateTime': in_an_hour
        },
        'end': {
            'dateTime': in_two_hours
        },
        'attendees': [
            {'email': host_email},
            {'email': guest_email}
        ],
        'guestsCanModify': True
    }
    events_result = host_service.events().insert(calendarId='primary', body=event).execute()
    event_id = events_result['id']
    print('Event created with EventID: '+event_id)

    initial_host_event = host_service.events().get(calendarId='primary', eventId=event_id).execute()
    print('initial host event summary: ', initial_host_event['summary'])

    # guest picks it and updates
    event['summary'] = original_summary + ' modified by guest'
    updated_event = guest_service.events().update(calendarId='primary', eventId=event_id, sendUpdates='all',
                                                  body=event).execute()
    print('updated guest event summary:', updated_event['summary'])

    # finally we verify both are updated
    final_host_event = host_service.events().get(calendarId='primary', eventId=event_id).execute()
    print('final host event summary: ', final_host_event['summary'])
    final_guest_event = guest_service.events().get(calendarId='primary', eventId=event_id).execute()
    print('final guest event summary: ', final_guest_event['summary'])

if __name__ == '__main__':
    main()

Результат:

building host_atGMAIL_token_new.pickle

host_service:

building guest_atSWM_token_new.pickle

guest_service:

Создание события хоста Событие, созданное с помощью EventID: vsavpfrbjcoos1o5kd3fq12vg

Сводка начального события хоста: сводка начального события:

обновленная сводка событий гостя: исходная сводка, измененная гостем

итоговая сводка событий хоста: начальная сводка

итоговая сводка событий гостя: первоначальная сводка, измененная гостем

...