Python 如何使用github3.py仅拉取修改的提交/拉取请求?
我正在编写一个ETL作业,其中保存了数据仓库中来自Python 如何使用github3.py仅拉取修改的提交/拉取请求?,python,github,github3.py,Python,Github,Github3.py,我正在编写一个ETL作业,其中保存了数据仓库中来自GitHubrepo的提交、请求和文件的更新列表。我目前正在存储并向各种迭代器传递etag,但我认为我不了解如何正确地执行它 我也很难理解object.refresh(conditional=True)到底在做什么。如果我迭代一个repo上的所有提交,然后对每个提交调用commit.refresh(conditional=True),我是否会收到一个304异常以进行处理,这样我就知道不会将该提交包含在数据仓库中,因为它没有更改?拉取请求也是如此。
GitHub
repo的提交、请求和文件的更新列表。我目前正在存储并向各种迭代器传递etag
,但我认为我不了解如何正确地执行它
我也很难理解object.refresh(conditional=True)
到底在做什么。如果我迭代一个repo上的所有提交,然后对每个提交调用commit.refresh(conditional=True)
,我是否会收到一个304异常以进行处理,这样我就知道不会将该提交包含在数据仓库中,因为它没有更改?拉取请求也是如此。当我调用repository.refresh(conditional=True)
时,它似乎忽略了repos中的新提交
如果我将etag
传递给repo.iter\u提交
,它将只返回修改后的提交,还是返回repo的所有提交(如果有任何更改)
这是我当前使用的基本工作流:
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...
我将每个迭代器包装在一个包装类中,该类负责检索以前的etag
,在迭代后存储etag
,并检查速率限制
我的首要目标是提取自上次请求以来发生更改的任何新提交/提取请求。我假设此时我希望从数据库中删除现有条目,并使用新条目进行更新
使用github3.py
API实现这一点的正确和最有效的方法是什么
编辑:
我再次检查了文档,有一个
since
参数将解决提交问题。因此,我只需要知道如何正确使用etag来提取更新的请求数据。因此etag的工作方式如下:
- 如果资源发生更改,则必须再次使用整个资源
- 如果没有更改,您将收到
204无内容的响应
push
事件的webhook