Pygithub: 最近ランダムな401の不正なクレデンシャルの例外

作成日 2013年03月21日  ·  4コメント  ·  ソース: PyGithub/PyGithub

こんにちは、

PyGithubはhttps://github.com/Borkason/google-code-issues-migratorの一部であり、放棄されたプロジェクトからのフォークであり、最近、そのスクリプトでランダムに401 BadCredentials例外が発生します。 この例外は過去には発生していませんでした。そのため、PyGithubが資格情報を処理する方法に関係している可能性があると思います。 たぶん、Githubは過去1〜2か月で何かを変更しましたか?

例外の外観にはまだパターンが見つかりませんでした。 ランダムだと思います。

これが私がすることです
__main__ 1回認証します//github.com/Borkason/google-code-issues-migrator/blob/master/migrateissues.py#L493。
次に、すべての問題の移行を開始します。 スクリプトはすべての問題をフェッチし、GoogleコードAPIでいくつかのことを実行してから、コメントを含む新しい問題をgithubに作成します。 ほとんどの場合、問題の作成中に例外を受け取ります。 常にランダムな時点で(2つの問題を追加した後、100の問題を追加した後...

_私はあなたが何らかの形で助けることができることを願っています。_

これは例外です

Traceback (most recent call last):
  File "migrateissues.py", line 529, in <module>
    process_gcode_issues(existing_issues)
  File "migrateissues.py", line 332, in process_gcode_issues
    add_comments_to_issue(github_issue, gid)
  File "migrateissues.py", line 236, in add_comments_to_issue
    existing_comments = [ comment.body for comment in github_issue.get_comments() ]
  File "/usr/local/lib/python2.7/dist-packages/PyGithub-1.12.2-py2.7.egg/github/PaginatedList.py", line 35, in __iter__
    newElements = self.__grow()
  File "/usr/local/lib/python2.7/dist-packages/PyGithub-1.12.2-py2.7.egg/github/PaginatedList.py", line 47, in __grow
    newElements = self._fetchNextPage()
  File "/usr/local/lib/python2.7/dist-packages/PyGithub-1.12.2-py2.7.egg/github/PaginatedList.py", line 104, in _fetchNextPage
    headers, data = self.__requester.requestJsonAndCheck("GET", self.__nextUrl, self.__nextParams, None)
  File "/usr/local/lib/python2.7/dist-packages/PyGithub-1.12.2-py2.7.egg/github/Requester.py", line 84, in requestJsonAndCheck
    return self.__check(*self.requestJson(verb, url, parameters, input))
  File "/usr/local/lib/python2.7/dist-packages/PyGithub-1.12.2-py2.7.egg/github/Requester.py", line 92, in __check
    raise GithubException.GithubException(status, output)
github.GithubException.GithubException: 401 {u'message': u'Bad credentials'}
question

全てのコメント4件

こんにちは!

私も過去数日間この問題を経験しました。 これはGIthub側のバグである必要があり、PyGithubとは関係ありません。 次のシェルスクリプトで再現できます(ログインとパスワードを引数として呼び出します)。

#!/bin/sh

USER=$1
PASSWORD=$2

CONTINUE=1

while [ $CONTINUE == "1" ]
do
    OUTPUT=$(curl --include https://$USER:[email protected]/user 2>&1)

    if echo "$OUTPUT" | grep "200 OK" >/dev/null
    then
        echo OK
    else
        date
        echo "$OUTPUT"
        CONTINUE=0
    fi
done

特定の数の「OK」を出力し、PyGithubによってスローされた例外につながるエラーメッセージで終了します。

[...]
OK
OK
OK
OK
Thu Mar 21 20:35:50 RST 2013
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    35  100    35    0     0     57      0 --:--:-- --:--:-- --:--:--    70HTTP/1.1 401 Unauthorized
Server: GitHub.com
Date: Thu, 21 Mar 2013 19:35:53 GMT
Content-Type: application/json; charset=utf-8
Connection: keep-alive
Status: 401 Unauthorized
X-GitHub-Media-Type: github.beta
Content-Length: 35

{
  "message": "Bad credentials"
}

バグをGithubに直接送信することをお勧めします。

昨日は問題ありませんでしたが、今日は再び完全にバグがあります。

PaginatedList.pyのGithubの問題を回避するために、すばやく汚いハックを行いました

def _fetchNextPage(self):
        myWorkaround = True
        while myWorkaround:
                try:
                        headers, data = self.__requester.requestJsonAndCheck("GET", self.__nextUrl, self.__nextParams, None)
                        myWorkaround = False
                except:
                        pass

        […]

今日、私はAPIへのいくつかの(ページ付けされていない)リクエストのみを実行する単純なスクリプトで問題を経験しました。 それは私にとって絶対に重要ではないので、GitHubに自分で連絡する時間はありません。

この問題はページ付けよりも一般的であるため、本当に回避策が必要な場合は、 Requester.pyで実行することをお勧めします。

行143を置き換えます

status, responseHeaders, output = self.__requestRaw(verb, url, requestHeaders, encoded_input)

のようなものによって

status = 401
retries = 5
while retries > 0 and status == 401:
    status, responseHeaders, output = self.__requestRaw(verb, url, requestHeaders, encoded_input)
    retries -= 1

(私はまったくテストしていません)

そのスニペットを提供してくれてありがとう:+1:
Githubに連絡しましたが、その問題を再現できなかったようです。 しかし、回避策があったので、これ以上時間を投資することはありません:)

乾杯。

このページは役に立ちましたか?
0 / 5 - 0 評価