Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

Support default env credentials (e.g. needed in Google Colaboratory (Colab)) + workaround for now

Aperta
#187 3 commenti 2 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
35/100
Tipo di issue
Funzionalità
Chiarezza
Abbastanza chiara
Stato di attività
Ferma
Stack tecnologico
python

Direzione di ricerca

Inizia in pydrive2/auth.py, in particolare con il flusso GoogleAuth relativo a LoadClientConfig, GetFlow e LocalWebserverAuth, e confrontalo con l’import hook pydrive di Google Colaboratory collegato. Riproduci il fallimento di Colab e verifica che le credenziali dell’ambiente predefinito possano autenticarsi senza il monkey patch o il workaround client_secrets.json.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

feature request priority-p1

Google Colaboratory provides these instructions for using PyDrive: https://colab.research.google.com/notebooks/snippets/drive.ipynb#scrollTo=bRFyEsdfBxJ9

Running the same code, but substituting pydrive2 for pydrive, produces errors as collapsed here.

FileNotFoundError                         Traceback (most recent call last)
/usr/local/lib/python3.7/dist-packages/oauth2client/clientsecrets.py in _loadfile(filename)
    120     try:
--> 121         with open(filename, 'r') as fp:
    122             obj = json.load(fp)

FileNotFoundError: [Errno 2] No such file or directory: 'client_secrets.json'

During handling of the above exception, another exception occurred:

InvalidClientSecretsError                 Traceback (most recent call last)
9 frames
/usr/local/lib/python3.7/dist-packages/pydrive2/auth.py in LoadClientConfigFile(self, client_config_file)
    476             client_type, client_info = clientsecrets.loadfile(
--> 477                 client_config_file
    478             )

/usr/local/lib/python3.7/dist-packages/oauth2client/clientsecrets.py in loadfile(filename, cache)
    164     if not cache:
--> 165         return _loadfile(filename)
    166 

/usr/local/lib/python3.7/dist-packages/oauth2client/clientsecrets.py in _loadfile(filename)
    124         raise InvalidClientSecretsError('Error opening file', exc.filename,
--> 125                                         exc.strerror, exc.errno)
    126     return _validate_clientsecrets(obj)

InvalidClientSecretsError: ('Error opening file', 'client_secrets.json', 'No such file or directory', 2)

During handling of the above exception, another exception occurred:

InvalidConfigError                        Traceback (most recent call last)
<ipython-input-3-e7c1a9729564> in <module>()
     16 uploaded = drive.CreateFile({'title': 'Sample file.txt'})
     17 uploaded.SetContentString('Sample upload file content')
---> 18 uploaded.Upload()
     19 print('Uploaded file with ID {}'.format(uploaded.get('id')))

/usr/local/lib/python3.7/dist-packages/pydrive2/files.py in Upload(self, param)
    495                 self._FilesPatch(param=param)
    496         else:
--> 497             self._FilesInsert(param=param)
    498 
    499     def Trash(self, param=None):

/usr/local/lib/python3.7/dist-packages/pydrive2/auth.py in _decorated(self, *args, **kwargs)
     58                 self.auth.ServiceAuth()
     59             else:
---> 60                 self.auth.LocalWebserverAuth()
     61 
     62         # Initialise service if not built yet.

/usr/local/lib/python3.7/dist-packages/pydrive2/auth.py in _decorated(self, *args, **kwargs)
    122             self.LoadCredentials()
    123         if self.flow is None:
--> 124             self.GetFlow()
    125         if self.credentials is None:
    126             code = decoratee(self, *args, **kwargs)

/usr/local/lib/python3.7/dist-packages/pydrive2/auth.py in GetFlow(self)
    565             config in self.client_config for config in self.CLIENT_CONFIGS_LIST
    566         ):
--> 567             self.LoadClientConfig()
    568         constructor_kwargs = {
    569             "redirect_uri": self.client_config["redirect_uri"],

/usr/local/lib/python3.7/dist-packages/pydrive2/auth.py in LoadClientConfig(self, backend)
    454                 )
    455         if backend == "file":
--> 456             self.LoadClientConfigFile()
    457         elif backend == "settings":
    458             self.LoadClientConfigSettings()

/usr/local/lib/python3.7/dist-packages/pydrive2/auth.py in LoadClientConfigFile(self, client_config_file)
    478             )
    479         except clientsecrets.InvalidClientSecretsError as error:
--> 480             raise InvalidConfigError("Invalid client secrets file %s" % error)
    481         if client_type not in (
    482             clientsecrets.TYPE_WEB,

InvalidConfigError: Invalid client secrets file ('Error opening file', 'client_secrets.json', 'No such file or directory', 2)

The google-colab package would monkey-patch pydrive to avoid these errors.

To monkey-patch pydrive2 in the same way, you need to:

import httplib2
from oauth2client.contrib.gce import AppAssertionCredentials
from pydrive2.auth import GoogleAuth

old_local_webserver_auth = GoogleAuth.LocalWebserverAuth


def LocalWebServerAuth(self, *args, **kwargs):
    if isinstance(self.credentials, AppAssertionCredentials):
        self.credentials.refresh(httplib2.Http())
        return
    return old_local_webserver_auth(self, *args, **kwargs)


GoogleAuth.LocalWebserverAuth = LocalWebServerAuth

Then, you can use the same code as in Google Colaboratory's instructions.

Lingua principale
Python
Stelle
670
Fork
75
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di iterative/PyDrive2

Tutte le issue di iterative/PyDrive2

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.