Некоторые файлы отсутствуют в Google Drive API v3 Python файлы (). List () - PullRequest
0 голосов
/ 13 сентября 2018

Я новичок в использовании Google Drive API для Python (v3), и я пытаюсь получить доступ и обновить подпапки в определенной родительской папке, для которой у меня есть fileId. Вот моя сборка для драйвера API:

store = file.Storage('token.json')
creds = store.get()
if not creds or creds.invalid:
    flow = client.flow_from_clientsecrets('credentials.json',
           scope='https://www.googleapis.com/auth/drive')
    creds = tools.run_flow(flow, store)
service = build('drive', 'v3', http=creds.authorize(Http()))

Я могу успешно получить доступ к большинству подпапок с помощью files().list(), но по крайней мере один из них отсутствует в списке возвращенных результатов:

results = service.files().list(
    q="parents in '1QXPl6z04GsYAO0GKHBk2oBjEweaAbczw'", 
    fields="files(id, name), incompleteSearch, nextPageToken").execute()
items = results['files']

Я дважды проверил, и в результатах не было клавиши nextPageToken, а значение incompleteSearch было False, что, я предполагаю, означает, что полный список результатов был возвращен. Кроме того, когда я получил доступ к списку родителей для отсутствующего файла с помощью метода file().get(), в списке был указан только один родительский элемент в запросе выше:

service.files().get(
    fileId='1WHP02DtXfJHfkdr47xSeeRIj0sCrihPA',
    fields='parents, name').execute()

и возвращает это:

{'name': 'Sara Gaul -Baltimore Corps docs and schedules',
 'parents': ['1QXPl6z04GsYAO0GKHBk2oBjEweaAbczw']}

Другие подробности, которые могут иметь отношение к делу:

  • Эта конкретная папка, отсутствующая в списке, была переименована соавтором.
  • Я запускаю этот код на ноутбуке Jupyter вместо файла Python.
  • Я назвал соавтора с правами записи для всех подпапок, включая ту, которая не отображается.

ОБНОВЛЕНИЯ

  • Запрос files().list() используется для возврата 40 записей из 41 в папке. Сейчас он только возвращается 39.
  • Обе папки, которые больше не возвращаются, были переименованы кем-то, кто получил доступ к папке по ссылке, которая расширяет права доступа на запись.
  • Когда сведения об их папках запрашиваются напрямую с использованием files().get(), у обеих невозвращенных папок родительская папка по-прежнему остается единственным родительским, и их разрешения не изменились.

Основные вопросы:

  1. Почему этот файл, в котором явно указан родительский идентификатор в моем запросе file().list(), не отображается в результатах этого запроса? И есть ли способ настроить запрос или файл, чтобы убедиться, что он делает?
  2. Существует ли более простой способ перечислить все файлы, содержащиеся в папке, в Google Drive API v3? Я знаю, что в v2 был метод children() для папок, но, насколько мне известно, в v3 он устарел

1 Ответ

0 голосов
/ 14 сентября 2018

Я обнаружил ошибку с моим кодом:

Мой предыдущий параметр запроса в методе files().list() был:

results = service.files().list(
    q="parents in '1QXPl6z04GsYAO0GKHBk2oBjEweaAbczw'", 
    fields="files(id, name), incompleteSearch, nextPageToken").execute()
items = results['files']

После просмотра другой ошибки, опубликованной в проблеме GoogleДля отслеживания API я увидел, что предпочтительный синтаксис для этого запроса был:

results = service.files().list(
    q="'1QXPl6z04GsYAO0GKHBk2oBjEweaAbczw' in parents", 
    fields="files(id, name), incompleteSearch, nextPageToken").execute()
items = results['files']

Другими словами, переключая порядок parents in fileId на fileId in parents.В результате изменения синтаксиса были возвращены все 41 файл.

У меня есть два дополнительных вопроса, которые, надеюсь, кто-то сможет уточнить:

  1. Почему первый синтаксис вообще возвращает какие-либо записиесли это неверно?И почему изменение имени файла препятствует его возврату с использованием первого синтаксиса?
  2. Если вы хотите вернуть список файлов, которые были сохранены в одной из нескольких папок, есть ли способ передатьнесколько родительских идентификаторов для запроса, как подсказывает синтаксис parents in ...?Или их нужно оценивать как отдельные условия, например fileId1 in parents or fileId2 in parents?

Если бы кто-то мог прокомментировать этот ответ с этими объяснениями или опубликовать более полный ответ, я бы с удовольствием выбрал его как лучший ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...