Как использовать Google Drive v3 API через Python API, чтобы запретить редакторам предоставлять общий доступ к электронной таблице? - PullRequest
0 голосов
/ 07 февраля 2019

Я пытаюсь выяснить, как программно в Python реализовать решение, описанное здесь для Запретить другим пользователям обмениваться вашими общими файлами (используя Google Drive API v3).

Я программно создаю электронную таблицу Google следующим образом:

from oauth2client.service_account import ServiceAccountCredentials
from googleapiclient import discovery

get_credentials = ServiceAccountCredentials.from_json_keyfile_dict
credentials = get_creds(keyfile_dict=keyfile_dict, scopes=scopes)

service_sheets = discovery.build('sheets', 'v4', credentials=credentials)
service_drive = discovery.build('drive', 'v3', credentials=credentials)

# create sheet
body = {'properties': {'title': 'this is my spreadsheet title'}}
response_create = service_sheets.spreadsheets().create(body=body).execute()

Но эта таблица принадлежит моей учетной записи разработчика, и я не могу редактировать или даже просматривать ее.Затем я хочу дать себе разрешение на запись, которое я делаю следующим образом:

# change permission
new_permission_w = {
    'value': 'MY_GMAIL_NAME@gmail.com',
    'emailAddress': 'MY_GMAIL_NAME@gmail.com',
    'type': 'user',
    'role': 'writer'
}
perms = service_drive.permissions()
response_perm = (perms
                 .create(fileId=response_create['spreadsheetId'],
                         body=new_permission_w,
                         sendNotificationEmail=False,
                         useDomainAdminAccess=False,
                         transferOwnership=False)
                 .execute())

Я хочу помешать людям, с которыми я им делюсь, иметь возможность делиться ими с другими людьми.Похоже, что есть способ сделать это через API, как указано здесь: Используйте Google Drive API, чтобы изменить разрешения на обмен ссылками , но я не вижу, как это сделать в Python.Я попытался изменить dict для perms на

new_permission_w = {
    'value': 'MY_GMAIL_NAME@gmail.com',
    'emailAddress': 'MY_GMAIL_NAME@gmail.com',
    'type': 'user',
    'role': 'writer',
    'setWritersCanShare': False
}

(то есть, добавив 'setWritersCanShare': False к dict), но вызов API, похоже, игнорирует клавишу 'setWritersCanShare'.Я также попытался изменить вызов API на

response_perm = (perms
                 .create(fileId=response_create['spreadsheetId'],
                         body=new_permission_w,
                         sendNotificationEmail=False,
                         useDomainAdminAccess=False,
                         setWritersCanShare=False,
                         transferOwnership=False)
                 .execute())

, но я получил TypeError: Got an unexpected keyword argument "setWritersCanShare".

Я также посмотрел, есть ли для этого решение gpsread ,но не смог найти.

Я в растерянности.Как я могу использовать API через python, чтобы программно запретить редакторам делиться?

1 Ответ

0 голосов
/ 07 февраля 2019
  • Вы хотите изменить свойство writersCanShare на False с помощью Python.
  • Вы можете использовать Drive API.
  • Владелец файла, который вы хотите изменитьсвойство это вы.

Если мое понимание верно, как насчет использования метода files.update в Drive API?

Пример сценария:

body = {'writersCanShare': False}
res = service_drive.files().update(fileId=response_create['spreadsheetId'], body=body).execute()

Справка:

Если я неправильно понял ваш вопрос, прошу прощения.

...