Скопировать файл в определенную родительскую папку с помощью Google Drive API?

Я использую Python 2.7 и служебную учетную запись, чтобы скопировать файл на Google Диске в другую папку в зависимости от его названия. Это требует от меня выполнения пяти (5!) Команд:

  1. Найти идентификатор файла по названию. (files().list)
  2. Найти идентификатор родительской папки по названию (files().list)
  3. Копировать файл (files().copy)
  4. Передача права собственности на реальный счет (files().insert)
  5. Переместить в родительскую папку. (parents().insert)

Это все работает, но я хотел бы уменьшить количество вызовов, и в первую очередь это означает кэширование идентификаторов, поэтому мне не нужно звонить files().list, Следующее, что я пытаюсь сделать, и, в частности, где я нахожусь с этим вопросом, это как установить родительскую папку в files().copy команда. В документации есть опционально parents Параметр описан так:

Коллекция родительских папок, которые содержат этот файл. Установка этого поля поместит файл во все предоставленные папки. При вставке, если папки не указаны, файл будет помещен в корневую папку по умолчанию.

Хотя это и не говорит, я знаю, что это означает родительские идентификаторы, поскольку это то, что используется везде. Однако установка этого массива в клиентской библиотеке не дает эффекта: ошибки нет, и файл определенно не находится в нужной папке.

newfile = {'title': newtitle, 'parents' : [ parentFolderId ]}
service.files().copy(fileId=originalId, body=newfile).execute()

Кому-нибудь повезло с этим? Что-то еще мне не хватает?

Бонус: передать право собственности в команде копирования? Возможно, моя учетная запись службы может выдать себя за меня?

1 ответ

Решение

Ах, ха! parents массив представляет собой список объектов с id поле:

newfile = {'title': newtitle, 'parents' : [ { "id" : parentFolderId } ]}
service.files().copy(fileId=originalId, body=newfile).execute()

Я обновлю это, если / когда я выясню, как установить разрешения также.

Одно странное замечание: файл все еще копируется в корень диска, а также в родительские папки, которые я указал.

Другие вопросы по тегам