Hallo,
PyGithub ist Teil von https://github.com/Borkason/google-code-issues-migrator , einer Abzweigung aus einem aufgegebenen Projekt, und kĂŒrzlich erhalte ich mit diesem Skript zufĂ€llige Ausnahmen von 401 Bad Credentials. Diese Ausnahme ist in der Vergangenheit nicht aufgetreten. Deshalb denke ich, dass dies möglicherweise damit zu tun hat, wie PyGithub mit den Anmeldeinformationen umgeht. Vielleicht hat Github in den letzten 1 oder 2 Monaten etwas geĂ€ndert?
Ich konnte noch kein Muster im Erscheinungsbild der Ausnahmen finden. Ich denke es ist zufÀllig.
Das ist was ich mache
Ich authentifiziere mich einmal in __main__
: https://github.com/Borkason/google-code-issues-migrator/blob/master/migrateissues.py#L493.
Dann beginne ich alle Probleme zu migrieren. Das Skript ruft alle Probleme ab, erledigt einige Dinge mit der Google Code-API und erstellt dann neue Probleme in Github, einschlieĂlich Kommentare. Meistens erhalte ich wĂ€hrend der Erstellung der Ausgabe die Ausnahmen. Immer an einem zufĂ€lligen Punkt (manchmal nach dem HinzufĂŒgen von 2 Ausgaben, manchmal nach dem HinzufĂŒgen von 100 Ausgaben ...
Ich hoffe, Sie können in irgendeiner Weise helfen.
Dies ist die Ausnahme
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'}
Hallo!
Ich habe dieses Problem auch in den letzten Tagen erlebt. Es muss ein Fehler auf GIthubs Seite sein, es hat nichts mit PyGithub zu tun. Es kann mit dem folgenden Shell-Skript reproduziert werden (rufen Sie es mit Ihrem Login und Passwort als Argumente auf):
#!/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
Es gibt eine bestimmte Anzahl von "OK" aus und endet mit der Fehlermeldung, die zu der von PyGithub ausgelösten Ausnahme fĂŒhrt:
[...]
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"
}
Möglicherweise möchten Sie einen Fehler direkt an Github senden.
Gestern hatte ich keine Probleme, heute ist es wieder voll abgehört.
Ich habe einen schnellen und schmutzigen Hack durchgefĂŒhrt, um das Github-Problem in PaginnedList.py zu umgehen
def _fetchNextPage(self):
myWorkaround = True
while myWorkaround:
try:
headers, data = self.__requester.requestJsonAndCheck("GET", self.__nextUrl, self.__nextParams, None)
myWorkaround = False
except:
pass
[âŠ]
Heute habe ich das Problem auch bei einem einfachen Skript festgestellt, das nur wenige (nicht paginierte) Anforderungen an die API ausfĂŒhrt. Es ist absolut nicht kritisch fĂŒr mich, daher werde ich mir nicht die Zeit nehmen, GitHub selbst zu kontaktieren.
Das Problem ist allgemeiner als die Paginierung. Wenn Sie also wirklich eine Problemumgehung benötigen, ziehen Sie es möglicherweise vor, dies in Requester.py zu tun:
Zeile 143 ersetzen
status, responseHeaders, output = self.__requestRaw(verb, url, requestHeaders, encoded_input)
von so etwas wie
status = 401
retries = 5
while retries > 0 and status == 401:
status, responseHeaders, output = self.__requestRaw(verb, url, requestHeaders, encoded_input)
retries -= 1
(Ich habe ĂŒberhaupt nicht getestet)
Vielen Dank fĂŒr die Bereitstellung dieses Snippets: +1:
Ich habe Github kontaktiert, aber sie schienen dieses Problem nicht wiederholen zu können. Aber da ich eine Problemumgehung habe, werde ich auch keine Zeit mehr investieren :)
Prost.