こんにちは、
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'}
こんにちは!
私も過去数日間この問題を経験しました。 これは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に連絡しましたが、その問題を再現できなかったようです。 しかし、回避策があったので、これ以上時間を投資することはありません:)
乾杯。