Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

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

オープン
#187 コメント 3 件 リアクション 2 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
35/100
issue の種類
機能追加
明瞭さ
おおむね明確
活発さ
停滞
技術スタック
python

調査の方向性

pydrive2/auth.py から始め、特に LoadClientConfig、GetFlow、LocalWebserverAuth 周辺の GoogleAuth フローを確認し、リンク先の Google Colaboratory の pydrive import hook と比較してください。Colab の失敗を再現し、monkey patch や client_secrets.json workaround なしでデフォルト環境の認証情報による認証が可能であることを検証してください。

索引モデルが issue の本文から書いたものです。

説明

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.

主要言語
Python
スター
670
フォーク
75
PR マージ指標
30日以内にマージされた PR はありません

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

iterative/PyDrive2 のほかの issue

iterative/PyDrive2 の issue をすべて見る

似ている issue

Python の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。