如何仅使用github3.py来修改提交/提交请求?
我正在写一个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来提取更新的请求数据。
这样的ETag以下列方式工作:
你做的请求,并消耗资源和存储的eTag
-
你让与ETag值
- 的请求
如果资源发生更改,则必须再次使用整个资源
如果没有变化,您将收到
204 No Content
响应
- 的请求
的ETag不允许你从你在哪里,并有从你离开了与API,其中恢复没有什么好办法恢复。
老实说,我认为你可能想要做的是以下几点:
- 消费上的存储库
- 所有在场的提交注册订阅了刚刚
push
事件 - 过程中的其余网络挂接当人们将他们推送到GitHub时,这些提交就会出现。