From c7aa1348f608dd0ff56562946fcc64b61ab11fda Mon Sep 17 00:00:00 2001 From: Jedr Blaszyk Date: Tue, 9 Jan 2024 11:27:19 +0100 Subject: [PATCH] [Google Drive] Fix permission fetching bug for domain-wide delegation sync (#2024) --- connectors/sources/google_drive.py | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/connectors/sources/google_drive.py b/connectors/sources/google_drive.py index c3c8c6414..ead18ac16 100644 --- a/connectors/sources/google_drive.py +++ b/connectors/sources/google_drive.py @@ -172,7 +172,13 @@ async def list_files(self, fetch_permissions=False): yield file async def list_files_from_my_drive(self, fetch_permissions=False): - """Get files from Google Drive. Files can have any type. + """Retrieves files from Google Drive, with an option to fetch permissions (DLS). + + This function optimizes the retrieval process based on the 'fetch_permissions' flag. + If 'fetch_permissions' is True, the function filters for files the user can edit + ("trashed=false and 'me' in writers") as permission fetching requires write access. + If 'fetch_permissions' is False, it simply filters out trashed files ("trashed=false"), + allowing a broader file retrieval. Args: include_permissions (bool): flag to select permissions in the request query @@ -181,17 +187,19 @@ async def list_files_from_my_drive(self, fetch_permissions=False): dict: Documents from Google Drive. """ - files_fields = ( - DRIVE_ITEMS_FIELDS_WITH_PERMISSIONS - if fetch_permissions - else DRIVE_ITEMS_FIELDS - ) + if fetch_permissions: + files_fields = DRIVE_ITEMS_FIELDS_WITH_PERMISSIONS + # Google Drive API required write access to fetch file's permissions + list_query = "trashed=false and 'me' in writers" + else: + files_fields = DRIVE_ITEMS_FIELDS + list_query = "trashed=false" async for file in self.api_call_paged( resource="files", method="list", corpora="user", - q="trashed=false", + q=list_query, orderBy="modifiedTime desc", fields=f"files({files_fields}),incompleteSearch,nextPageToken", includeItemsFromAllDrives=False,