Pygithub: KĂŒrzlich zufĂ€llige 401 Bad Credentials-Ausnahmen

Erstellt am 21. MĂ€rz 2013  Â·  4Kommentare  Â·  Quelle: PyGithub/PyGithub

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'}
question

Alle 4 Kommentare

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.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

psychemedia picture psychemedia  Â·  5Kommentare

PeterJCLaw picture PeterJCLaw  Â·  6Kommentare

xpdable picture xpdable  Â·  5Kommentare

AdyaAbhra picture AdyaAbhra  Â·  5Kommentare

hren-ron picture hren-ron  Â·  6Kommentare