Google Drive API v3 обновляет объект, если он существует с тем же именем: параметр list 'q' не работает как задокументированный? - PullRequest
0 голосов
/ 28 сентября 2018

Я пытаюсь обновить файл, если он существует в определенной папке и имеет конкретное имя.В этом случае рассматриваемый объект находится в командном диске.Я следовал документации по составлению параметра q для вызова list, пытался переключиться обратно на v2 ... Кажется, что запрос составлен точно правильно.При этом, хотя я вижу несколько объектов, присутствующих в целевой папке, вызов списка не видит их.Я пробовал name = '' и name contains ''.Похоже, что команда Google успешно проверила вводные данные, как, например, при создании креативных бомб API.Любые указатели?

def import_or_replace_csv_to_td_folder(self, folder_id, local_fn, remote_fn, mime_type):
    DRIVE = build('drive', 'v3', http=creds.authorize(Http()))
    query = "'{0}' in parents and name = '{1}'.format(folder_id, remote_fn)
    print("Searching for previous versions of this file : {0}".format(query))
    check_if_already_exists = DRIVE.files().list(q=query, fields="files(id, name)").execute()
    name_and_location_conflict = check_if_already_exists.get('files', [])
    if not name_and_location_conflict:
        body = {'name': remote_fn, 'mimeType': mime_type, 'parents': [folder_id]}
        out = DRIVE.files().create(body=body, media_body=local_fn, supportsTeamDrives=True, fields='id').execute().get('id')
        return out
    else:
        if len(name_and_location_conflict)==1:
            file_id=name_and_location_conflict['id']
            DRIVE.files().update(fileId=file_id, supportsTeamDrives=True, media_body=local_fn)
            return file_id
        else:
            raise MultipleConflictsError("There are multiple documents matching parent folder and file name. Unclear which requires a version update")

Когда я пытался заменить параметр 'name' на 'title' (использовался для работы в v2, основываясь на некоторых ответах, которые я рассмотрел), API заскрипел

googleapiclient.errors.HttpError: <HttpError 400 when requesting https://www.googleapis.com/drive/v3/files?q=%27xxxxxxxxxxxxxxxx%27+in+parents+and+title+%3D+%27Somefile_2018-09-27.csv%27&fields=files%28id%2C+name%29&alt=json returned "Invalid Value">

1 Ответ

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

Спасибо @ tehhowch,

Действительно, дополнительные меры необходимы, когда необходимо установить цель в групповом диске, а именно параметр includeTeamDriveItems, в противном случае местоположения TD по умолчанию не включаются:

   check_if_already_exists = DRIVE.files().list(
       q=query, 
       fields="files(id, name)",
       supportsTeamDrives=True,
       includeTeamDriveItems=True
   ).execute()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...