我正在寫一個ETL作業,我在我們的數據倉庫中保存了來自我們GitHub
回購的更新提交列表,提交請求和文件。我目前正在存儲並將etags
傳遞給各種迭代器,但我不認爲我正在理解如何正確執行它。如何僅使用github3.py來修改提交/提交請求?
我也很難理解object.refresh(conditional=True)
究竟在做什麼。如果我遍歷所有提交的提交,然後每個提交commit.refresh(conditional=True)
,我會收到一個304異常處理,所以我知道不會在數據倉庫中包含該提交,因爲它沒有更改?拉取請求也一樣。當我打電話給repository.refresh(conditional=True)
時,它似乎忽略了回購中的新提交。
如果我將etag
傳遞給repo.iter_commits
,它只會返回修改的提交,還是會返回所有對回購的提交(如果根本沒有任何更改)?
這是我目前使用的基本流程:
from github3 import login
gh = login(token='access_token')
repos = (repo.refresh(conditional=True) for repo in gh.iter_repos(etag='previous_etag'))
commit_iters = (commit_iter for repo in repos for commit_iter in repo.iter_commits(etag='prev_etag'))
for commit_iter in commit_iters:
for commit in commit_iter:
commit.refresh(conditional=True)
# pull various attributes, write to file, etc...
我在包裹的包裝類中的每個迭代器來處理檢索以前etags
,迭代後存儲etags
,並檢查速率限制。
我的首要目標是提取自上次請求後發生更改的任何新的提交/拉取請求。我想在那一點上,我想從數據庫中刪除現有的條目,並使用新的條目進行更新。
什麼是使用github3.py
API實現此目標的正確且最有效的方法?
編輯: 我再次檢查了文檔,並有一個since
參數,將照顧我的提交問題。所以我只需要知道如何正確使用etags來提取更新的請求數據。