iterative / iterative/PyDrive2

Unable to list files with service account auth for GDriveFilesystem

Ouverte
#307 3 commentaires 0 réactions 0 personnes assignées Voir sur GitHub
fs
Langage dominant
Python
Étoiles
670
Forks
75
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

Hello, I'm using the latest version of the library `PyDrive2[fsspec]==1.17.0` and I'm trying to authenticate a service account (the SA email is shared with the drive I wish to test and the keys were generated, I doubt if this order matters).

I followed the steps provided in [the docs](https://docs.iterative.ai/PyDrive2/fsspec/#service-account) for the jsonkey file as a string. Its authenticated without errors however I'm unable to list files from the shared drive
1. GDrive API is hit
![image](https://github.com/iterative/PyDrive2/assets/117059509/95c29c8c-b372-4f7d-a75b-629e1978b3a8)
1. Listing of files with GDriveFilesystem returns empty (screenshot while debugging)
![gdrive_issue_proof (1)](https://github.com/iterative/PyDrive2/assets/117059509/3c9cd0c8-bd83-4131-9715-4d46a890aaf1)

Digging further, I followed steps mentioned in [this comment](https://github.com/iterative/PyDrive2/issues/21#issuecomment-929186260) and was able to list files with the `GDrive` object however. In fact I noticed the `GDrive` object being created [here](https://github.com/iterative/PyDrive2/blob/4d83d04948f16804026eaf4449ac02c75ba907a4/pydrive2/fs/spec.py#L234) and the files get listed (while debugging) when I used
```
file_list = self.client.ListFile().GetList()
```
![gdrive_issue_proof_ls (1)](https://github.com/iterative/PyDrive2/assets/117059509/2e58103c-344e-4f6a-9625-0de952b5df45)

Code snippet:
```python
from oauth2client.service_account import ServiceAccountCredentials
from pydrive2.auth import GoogleAuth
from pydrive2.fs import GDriveFileSystem
from pydrive2.drive import GoogleDrive

def _init_with_service_key(self, service_key_settings: str) -> GDriveFileSystem:
"""Creates a GDriveFileSystem with a service account key."""
# Attempt from issue #21
# scope = ["https://www.googleapis.com/auth/drive"]
# gauth = GoogleAuth()
# gauth.auth_method = 'service'
# gauth.credentials = ServiceAccountCredentials.from_json_keyfile_dict(service_key_settings, scopes=scope)
# drive = GoogleDrive(gauth)

# about = drive.GetAbout()
# file_list = drive.ListFile().GetList()
# gdrive = GDriveFileSystem(
# path="root",
# google_auth=gauth,
# use_service_account=True
# )

gdrive = GDriveFileSystem(
path="root",
use_service_account=True,
client_json=service_key_settings,
skip_instance_cache=True,
use_listings_cache=False
)
return gdrive
```

Any ideas on how I can proceed? Thanks in advance! :)

Guide de contribution

Ouvrir le guide de contribution

Piste de recherche

Start with the service-account path in pydrive2/fs/spec.py around line 234 and compare its GDriveFileSystem setup with the working GoogleDrive ListFile().GetList() example in the issue. Reproduce the empty listing against the shared drive and trace the API request; done means GDriveFileSystem lists the files available to the service account.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
google-cloud, python
Domaine
api, cloud
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
À clarifier
Accessibilité débutants
25/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.