2014-03-27 43 views
0

我使用github3.py每個I調用迭代時間傳遞etag參數,例如github3.py ETAG:爲條件請求

user.iter_starred(etag='97ba89b5c009e5530f108a06606f3e2c') 

,以避免消耗我的速率限制和執行conditional request。但無論如何,當我開始迭代時,github3總是執行正確的請求(因此實際的數據被提取),從而將速率限制降低了1.

我做錯了什麼或者它是一個錯誤?

回答

0

從我自己的實驗,這似乎按預期方式工作:

>>> import github3 
>>> u = github3.user('sigmavirus24') 
>>> u 
<User [sigmavirus24:Ian Cordasco]> 
>>> i = u.iter_starred() 
>>> i 
<GitHubIterator [-1, /users/sigmavirus24/starred]> 
>>> next(i) 
<Repository [functional-koans/clojure-koans]> 
>>> i.etag 
'"1aeaaa7a249610c52ba0363009afcab9"' 
>>> next(u.iter_starred(etag=i.etag)) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "github3/structs.py", line 103, in next 
    return self.__next__() 
    File "github3/structs.py", line 90, in __next__ 
    return next(self.__i__) 
StopIteration 

的區別我們的例子中之間是你的ETAG值是'97ba89b5c009e5530f108a06606f3e2c',其中作爲等同於我的是'"97ba89b5c009e5530f108a06606f3e2c"'。由於該值被放置在頭我認爲頭是很重要的:

If-None-Match: "97ba89b5c009e5530f108a06606f3e2c" 

相反的:

If-None-Match: 97ba89b5c009e5530f108a06606f3e2c 

這就是你會送。

而我只是檢查,那是什麼錯誤。圖書館按預期工作。你傳遞etag值的方式是錯誤的。它需要在該值附近有雙引號(例如,'"97ba89b5c009e5530f108a06606f3e2c"')才能正常工作。

+0

我不明白。你說我們需要傳遞類似於這個格式的etag:''「97ba89b5」''但這正是'i.etag'中包含的內容,所以爲什麼當它作爲參數傳遞時會拋出錯誤?u .iter_starred(etag = i.etag)'而不是'u.iter_starred(etag =''97ba89b5'')'?他們應該是完全一樣的 – Leonardo

+0

順便說一句,他們都沒有爲我工作,如果我通過'i.etag'我得到一個類似於你有一個錯誤。如果我傳遞一個字符串類似於這個「'」「97ba89b5」''我每次都用新的etag取回資源 – Leonardo

+0

錯誤是預期的行爲。這意味着請求已完成,並且不會返回任何內容。如果我去了一個新的存儲庫,那麼它只會返回那個存儲庫。 –