Pygithub: الاستثناءات العشوائية لـ 401 من بيانات الاعتماد السيئة مؤخرًا

تم إنشاؤها على ٢١ مارس ٢٠١٣  ·  4تعليقات  ·  مصدر: PyGithub/PyGithub

أهلا،

PyGithub هو جزء من https://github.com/Borkason/google-code-issues-migrator ، وهو شوكة بحد ذاته من مشروع مهجور ، ومؤخراً حصلت على استثناءات 401 Bad Credentials عشوائية مع هذا البرنامج النصي. لم يظهر هذا الاستثناء في الماضي ، ولهذا أعتقد أنه قد يكون له علاقة بكيفية تعامل PyGithub مع بيانات الاعتماد. ربما غيّر Github شيئًا ما في الشهرين أو الأشهر الماضية؟

لم أجد أي نمط في مظهر الاستثناءات حتى الآن. أعتقد أنه عشوائي.

هذا ما افعله
أصادق مرة واحدة في __main__ : https://github.com/Borkason/google-code-issues-migrator/blob/master/migrateissues.py#L493.
ثم أبدأ في ترحيل جميع المشكلات. يقوم البرنامج النصي بجلب جميع المشكلات ، ويقوم ببعض الأشياء باستخدام واجهة برمجة تطبيقات كود google ، ثم ينشئ مشكلات جديدة في جيثب ، بما في ذلك التعليقات. في الغالب أثناء إنشاء الإصدار ، أتلقى الاستثناءات. دائمًا في نقطة عشوائية (أحيانًا بعد إضافة مشكلتين ، وأحيانًا بعد إضافة 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

ينتج عددًا معينًا من "موافق" وينتهي برسالة الخطأ التي تؤدي إلى الاستثناء الذي طرحه 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

        […]

لقد واجهت اليوم أيضًا المشكلة في برنامج نصي بسيط يقوم فقط ببعض الطلبات (غير المقسمة إلى صفحات) لواجهة برمجة التطبيقات. إنه ليس حرجًا على الإطلاق بالنسبة لي ، لذلك لن أستغرق وقتًا للاتصال بـ GitHub بنفسي.

المشكلة عامة أكثر من ترقيم الصفحات ، لذلك إذا كنت بحاجة فعلاً إلى حل بديل ، فقد تفضل القيام بذلك في مقدم الطلب :

استبدل السطر 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 التقييمات

القضايا ذات الصلة

grayaii picture grayaii  ·  4تعليقات

hsluoyz picture hsluoyz  ·  3تعليقات

AdyaAbhra picture AdyaAbhra  ·  5تعليقات

xpdable picture xpdable  ·  5تعليقات

nixoz2k7 picture nixoz2k7  ·  7تعليقات