私は、データウェアハウスのGitHub
リポジトリからコミット、プルリクエスト、およびファイルの更新リストを保持するETLジョブを作成しています。私は現在、さまざまなイテレータにetags
を格納して渡していますが、正しく行う方法を理解しているとは思いません。github3.pyを使用して変更されたコミット/プルリクエストのみをプルする方法は?
私はまた、object.refresh(conditional=True)
が何を正確に行っているのか理解できていません。レポのすべてのコミットを繰り返して、それぞれにcommit.refresh(conditional=True)
を呼び出すと、処理する304例外が表示されるので、変更されていないので、データウェアハウスにそのコミットを含めないことを知っていますか?プルリクエストにも同じことが起こります。 repository.refresh(conditional=True)
と呼ぶと、reposの新しいコミットを無視するようです。
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を使用してこれを達成する適切かつ効率的な方法は何ですか?
EDIT: 私は再びドキュメントをチェックし、コミットに関する私の問題を処理するsince
パラメータがあります。ですから、私はちょうど更新されたプル要求データを引き出すためにetagsを適切に使用する方法を知る必要があります。