python google api создает папку с разрешением

#python #google-api #google-drive-api #google-api-python-client

#python #google-api #google-drive-api #google-api-python-client

Вопрос:

я пытаюсь создать общедоступную папку на Google Диске и получить взамен ссылку для совместного использования этого:

 def createfolder(foldername,service):
    new_role='reader'
    types='anyone'
    # create folder
    file_metadata = {
        'name': '{}'.format(foldername),
        'mimeType': 'application/vnd.google-apps.folder',
         'role': 'reader',
         'type': 'anyone',

    }
    file = service.files().create(body=file_metadata,
                                  fields='id,webViewLink').execute()
    print('Folder ID: %s' % file.get('webViewLink'))
    return file.get('id')
 

я зашел так далеко
он создает и папку и печатает ссылку
попробуйте добавить поля в роль и тип тела и установить для него значение reader / anyone, но это не работает
поля типа роли, похоже, игнорируются

есть ли способ сделать это при создании или мне нужно изменить разрешение после его создания?

Ответ №1:

Вы должны вызвать Permissions.create:

Права доступа к файлам обрабатываются с помощью разрешений, а не с помощью Files методов.

Если вы проверите представление ресурсов файлов, вы заметите, что в некоторых полях, таких как name или mimeType , есть слово writable under Notes . Это означает, что вы можете изменять эти поля напрямую, используя этот ресурс ( Files ) методы.

Однако, если вы проверите свойство permissions , вы заметите writable , что его там нет. Это означает permissions , что невозможно обновить напрямую, используя Files методы. Вместо этого вы должны использовать Permissions методы.

Более конкретно, вы должны вызвать Permissions.create после создания папки и ее извлечения ID .

Фрагмент кода:

 def shareWithEveryone(folderId, service):
    payload = {
        "role": "reader",
        "type": "anyone"
    }
    service.permissions().create(fileId=folderId, body=payload).execute()
 

Ссылка:

Комментарии:

1. спасибо, что я надеялся, что смогу сделать это одним вызовом, но этого хватит 🙂

Ответ №2:

Создание папки и изменение разрешений — это два разных вызова.

Сначала создайте свой каталог

 file = service.files().create(body=file_metadata).execute()
 

Затем выполните permissions.update, чтобы установить общедоступные разрешения для файла.

 permissions = service.permissions().update(body=permissions).execute()
 

Я не разработчик python, поэтому код является предположением

Комментарии:

1. Для permissionId этого потребуется A (см. Метод ). Кроме того, если файл был только что создан, у него есть только разрешение по умолчанию для владельца. Я не думаю, что это можно обновить, поскольку это заставило бы владельца стать reader . Вместо этого следует вызвать Permissions.create.

2. да, вы можете обновить существующее разрешение, или вы можете просто создать новое, это зависит от вас developers.google.com/drive/api/v3/reference/permissions/create .

3. TBH я буду удивлен, если вы сможете получить webviewlink в каталоге, раньше я делал это только с файлами.

4. Если ранее не было создано никакого разрешения после разрешения по умолчанию, это необязательно. Существующее разрешение является разрешением по умолчанию, соответствующим для owner этого файла. Вы не можете обновить это разрешение, чтобы поделиться им anyone , поскольку может быть только одна учетная owner запись (по крайней мере, для файлов с необщим диском), и вы не можете обновить ее до какой-либо другой роли, например reader , поскольку это приведет к тому, что файл не будет иметь no owner . Из-за этого при попытке обновить разрешение по умолчанию с permissions().update помощью, будет выдана ошибка ( fieldNotWritable ).