首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用github3.py只提取修改过的提交/拉请求?

如何使用github3.py只提取修改过的提交/拉请求?
EN

Stack Overflow用户
提问于 2017-04-04 17:18:35
回答 1查看 196关注 0票数 0

我正在编写一个ETL作业,其中保存了数据仓库中来自我们的GitHub repos的提交、拉请求和文件的更新列表。我目前正在存储etags并将其传递给不同的迭代器,但我不认为我理解如何正确地执行它。

我也很难理解object.refresh(conditional=True)到底在做什么。如果我在回购上迭代所有提交,然后对每一个都调用commit.refresh(conditional=True),那么我是否会收到一个304个异常来处理,这样我就知道不会在数据仓库中包含这个提交,因为它没有改变?拉请求也是如此。当我调用repository.refresh(conditional=True)时,它似乎忽略了repos中的新提交。

如果我将一个etag传递给repo.iter_commits,它将只返回修改后的提交,或者如果有任何更改,它会返回回购的所有提交吗?

这是我目前使用的基本工作流:

代码语言:javascript
复制
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来获取更新的拉请求数据。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-05 14:07:06

因此,ETags的工作方式如下:

  1. 您可以发出请求并使用资源并存储etag。
  2. 使用ETag值发出请求
代码语言:javascript
复制
- If there is a change to the resource, you must consume the entire resource again
- If there is no change, you will receive a `204 No Content` response

ETag不允许您从原来的位置恢复,也没有什么好的方法可以从您停止使用API的地方恢复。

老实说,我认为你可能想做的是:

  1. 使用存储库上的所有当前提交
  2. 注册一个仅订阅push事件的web钩子
  3. 当人们将其推送到GitHub时,处理其余的提交。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43213727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档