Pygithub: Недавно случайные исключения 401 неверных учетных данных

Созданный на 21 мар. 2013  ·  4Комментарии  ·  Источник: PyGithub/PyGithub

Привет,

PyGithub является частью https://github.com/Borkason/google-code-issues-migrator , который сам по себе является форком заброшенного проекта, и недавно я получаю случайные исключения 401 Bad Credentials с этим скриптом. Это исключение не отображалось в прошлом, поэтому я думаю, что это может быть связано с тем, как PyGithub обрабатывает учетные данные. Может быть, Github что-то изменил за последние 1 или 2 месяца?

Я пока не смог найти закономерности в появлении исключений. Я думаю, это случайно.

Это то, что я делаю
Я аутентифицирую один раз в __main__ : https://github.com/Borkason/google-code-issues-migrator/blob/master/migrateissues.py#L493.
Затем я начинаю переносить все проблемы. Скрипт выявляет все проблемы, выполняет некоторые действия с API кода Google, а затем создает новые проблемы в 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'}
question

Все 4 Комментарий

Привет!

Я также столкнулся с этой проблемой в последние несколько дней. Это должно быть ошибка на стороне 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.

Вчера проблем не было, сегодня опять полностью глючит.

Я сделал быстрый и грязный взлом, чтобы обойти проблему Github в 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

        […]

Сегодня у меня также возникла проблема с простым скриптом, выполняющим только несколько (без разбивки на страницы) запросов к 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, но, похоже, они не смогли воспроизвести эту проблему. Но так как у меня есть обходной путь, я тоже не буду тратить больше времени :)

Ваше здоровье.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

PeterJCLaw picture PeterJCLaw  ·  6Комментарии

rthill91 picture rthill91  ·  4Комментарии

nchammas picture nchammas  ·  3Комментарии

xpdable picture xpdable  ·  5Комментарии

jacquev6 picture jacquev6  ·  3Комментарии