Hai,
PyGithub adalah bagian dari https://github.com/Borkason/google-code-issues-migrator , yang merupakan cabang dari proyek yang ditinggalkan, dan baru-baru ini saya mendapatkan pengecualian 401 Kredensial Buruk secara acak dengan skrip itu. Pengecualian ini tidak muncul di masa lalu, itulah mengapa saya pikir itu mungkin ada hubungannya dengan bagaimana PyGithub menangani Kredensial. Mungkin Github mengubah sesuatu dalam 1 atau 2 bulan terakhir?
Saya belum bisa menemukan pola apa pun dalam munculnya pengecualian. Saya pikir itu acak.
Inilah yang saya lakukan
Saya mengautentikasi sekali dalam __main__
: https://github.com/Borkason/google-code-issues-migrator/blob/master/migrateissues.py#L493.
Kemudian saya mulai memigrasi semua masalah. Skrip mengambil semua masalah, melakukan beberapa hal dengan api kode google dan kemudian membuat masalah baru di github, termasuk komentar. Biasanya selama pembuatan masalah, saya menerima pengecualian. Selalu di titik acak (terkadang setelah menambahkan 2 masalah, terkadang setelah menambahkan 100 masalah ...
_Saya harap Anda dapat membantu dengan cara apa pun._
Ini pengecualian
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'}
Halo!
Saya juga mengalami masalah ini dalam beberapa hari terakhir. Itu pasti bug di pihak GIthub, itu tidak terkait dengan PyGithub. Itu dapat direproduksi dengan skrip shell berikut (sebut dengan login dan kata sandi Anda sebagai argumen):
#!/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
Ini mengeluarkan sejumlah "OK" dan diakhiri dengan pesan kesalahan yang mengarah ke pengecualian yang dilemparkan oleh 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"
}
Anda mungkin ingin mengirimkan bug ke Github secara langsung.
Kemarin saya tidak punya masalah, hari ini sepenuhnya disadap lagi.
Saya melakukan peretasan cepat dan kotor untuk mengatasi masalah Github di 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
[…]
Hari ini saya juga mengalami masalah pada skrip sederhana yang hanya melakukan beberapa permintaan (non-paginasi) ke API. Ini sama sekali tidak penting bagi saya, jadi saya tidak akan meluangkan waktu untuk menghubungi GitHub sendiri.
Masalahnya lebih umum daripada paginasi, jadi jika Anda benar-benar membutuhkan solusi, Anda dapat memilih melakukannya di Requester.py :
Ganti baris 143
status, responseHeaders, output = self.__requestRaw(verb, url, requestHeaders, encoded_input)
oleh sesuatu seperti
status = 401
retries = 5
while retries > 0 and status == 401:
status, responseHeaders, output = self.__requestRaw(verb, url, requestHeaders, encoded_input)
retries -= 1
(Saya belum menguji sama sekali)
Terima kasih telah memberikan cuplikan itu: +1:
Saya menghubungi Github, tetapi mereka tampaknya tidak dapat mereplikasi masalah itu. Tetapi karena saya mendapat solusi, saya juga tidak akan menginvestasikan waktu lagi :)
Bersulang.