Pygithub: Récemment, 401 exceptions de mauvais identifiants aléatoires

Créé le 21 mars 2013  ·  4Commentaires  ·  Source: PyGithub/PyGithub

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

Tous les 4 commentaires

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.

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

kodeshpa picture kodeshpa  ·  3Commentaires

nchammas picture nchammas  ·  3Commentaires

psychemedia picture psychemedia  ·  5Commentaires

nixoz2k7 picture nixoz2k7  ·  7Commentaires

AdyaAbhra picture AdyaAbhra  ·  5Commentaires