أهلا،
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'}
مرحبا!
لقد واجهت أيضًا هذه المشكلة في الأيام القليلة الماضية. يجب أن يكون خطأ من جانب 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 ، لكن لا يبدو أنهم قادرون على تكرار هذه المشكلة. ولكن نظرًا لأنني حصلت على حل بديل ، فلن أستثمر المزيد من الوقت أيضًا :)
هتافات.