Salut,
PyGithub fait partie de https://github.com/Borkason/google-code-issues-migrator , qui est une fourchette en soi d'un projet abandonné, et récemment, j'obtiens des exceptions aléatoires 401 Bad Credentials avec ce script. Cette exception ne s'est pas présentée dans le passé, c'est pourquoi je pense que cela pourrait avoir à voir avec la façon dont PyGithub gère les informations d'identification. Peut-être que Github a changé quelque chose au cours des 1 ou 2 derniers mois?
Je n'ai pas encore trouvé de modèle dans l'apparence des exceptions. Je pense que c'est aléatoire.
C'est ce que je fais
Je m'authentifie une fois dans __main__
: https://github.com/Borkason/google-code-issues-migrator/blob/master/migrateissues.py#L493.
Ensuite, je commence à migrer tous les problèmes. Le script récupère tous les problèmes, fait certaines choses avec l'API google code, puis crée de nouveaux problèmes dans github, y compris des commentaires. Surtout lors de la création du problème, je reçois les exceptions. Toujours à un moment aléatoire (parfois après avoir ajouté 2 problèmes, parfois après avoir ajouté 100 problèmes ...
_J'espère que vous pourrez aider de quelque manière que ce soit ._
C'est l'exception
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'}
Bonjour!
J'ai également rencontré ce problème ces derniers jours. Ce doit être un bug du côté de GIthub, ce n'est pas lié à PyGithub. Il peut être reproduit avec le script shell suivant (appelez-le avec votre login et mot de passe comme arguments):
#!/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
Il génère un certain nombre de "OK" et se termine par le message d'erreur conduisant à l'exception levée par 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"
}
Vous voudrez peut-être soumettre un bogue directement à Github.
Hier, je n'ai eu aucun problème, aujourd'hui, il est à nouveau complètement buggé.
J'ai fait un hack rapide et sale pour contourner le problème Github dans PaginatedList.py
def _fetchNextPage(self):
myWorkaround = True
while myWorkaround:
try:
headers, data = self.__requester.requestJsonAndCheck("GET", self.__nextUrl, self.__nextParams, None)
myWorkaround = False
except:
pass
[…]
Aujourd'hui, j'ai également rencontré le problème sur un simple script ne faisant que quelques requêtes (non paginées) à l'API. Ce n'est absolument pas critique pour moi, je ne prendrai donc pas le temps de contacter GitHub moi-même.
Le problème est plus général que la pagination, donc si vous avez vraiment besoin d'une solution de contournement, vous préférerez peut-être le faire dans Requester.py :
Remplacer la ligne 143
status, responseHeaders, output = self.__requestRaw(verb, url, requestHeaders, encoded_input)
par quelque chose comme
status = 401
retries = 5
while retries > 0 and status == 401:
status, responseHeaders, output = self.__requestRaw(verb, url, requestHeaders, encoded_input)
retries -= 1
(Je n'ai pas du tout testé)
Merci d'avoir fourni cet extrait: +1:
J'ai contacté Github, mais ils ne semblent pas être en mesure de reproduire ce problème. Mais depuis que j'ai une solution de contournement, je n'investirai plus de temps non plus :)
Acclamations.