Я пытаюсь разрешить гостю события календаря обновляться (сводка в моем примере). Это не работает, даже используя то, что говорят документы (то есть, создавая событие с '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
Сводка начального события хоста: сводка начального события:
обновленная сводка событий гостя: исходная сводка, измененная гостем
итоговая сводка событий хоста: начальная сводка
итоговая сводка событий гостя: первоначальная сводка, измененная гостем