google drive api v3 (python) обновляет файл настроек "роли" - PullRequest
0 голосов
/ 28 июня 2019

Я пытаюсь создать приложение на python 3.7, которое перечисляет все файлы в учетной записи диска и устанавливает для публичных файлов приватные. Я использую Google Drive API v3. Чтобы сделать это, мне нужно изменить права доступа к файлам "тип" на "пользователь", это не работает, и теперь я сначала пытаюсь поставить права доступа к файлам "роль" на "владелец", потому что в общедоступных файлах он показывает "читатель" или «писатель».

Я много чего перепробовал, и до сих пор это работает.

Вот код (на испанском, потому что это мой язык. Не работающая функция называется ActualizarPermisos)

    def actualizarPermisos(service, file_id, permission_id):

        try:
        # First retrieve the permission from the API.
            permission = service.permissions().get(
                fileId=file_id, permissionId=permission_id).execute()
            permission['role'] = 'writer'
            return service.permissions().update(
            fileId=file_id, permissionId=permission_id, body=permission, transferOwnership=False).execute()
        except errors.HttpError as error:
            print ('An error occurred: %s' % error)
            return None

Отображаемая ошибка: «Произошла ошибка: https://www.googleapis.com/drive/v3/files/0B4SorsEEhamLfmVuQUtFUXpMS25RT2k2SkpOTzFhclRubk1VM3ZDUkw5b3o0Zm5kRWpHWjQ/permissions/anyone?transferOwnership=false&alt=json возвращено» Тело ресурса содержит поля, которые не доступны для прямой записи. »>«

1 Ответ

0 голосов
/ 01 июля 2019

Проблема с вашим кодом заключается в том, что вы используете тело разрешения, которое вы получаете от метода get, который имеет поля id, kind и type. Эти поля не могут быть изменены при обновлении разрешения, только поля expirationTime и role могут быть изменены, как вы можете проверить здесь [1].

Вы можете просто создать разрешение json следующим образом:

permission = {'role': 'writer'}

И используйте его вместо тела разрешения, полученного из запроса на получение. Я проверил это и успешно обновил разрешение пользователя от читателя к писателю.

Если вам нужно изменить больше полей, чем разрешено, я предлагаю вам удалить разрешение (сначала получить необходимые данные) и создать новое разрешение для этого файла [2], здесь вы можете проверить разрешенные значения для каждого поле [3].

[1] https://developers.google.com/drive/api/v3/reference/permissions/update

[2] https://developers.google.com/resources/api-libraries/documentation/drive/v3/python/latest/drive_v3.permissions.html#create

[3] https://developers.google.com/drive/api/v3/reference/permissions

...