Github API:如何检查存储库是否为空?

时间:2015-10-28 18:03:10

标签: github-api pygithub

我使用pygithub3库来解析用户存储库,但有时会在失败的请求之后解决断言。起初我怀疑我已达到命中率限制,但很快我意识到我可以100%重现断言“空”'存储库(参见示例)。

https://github.com/poelzi/vaultfs

我如何检查存储库是否可用? 简化的代码段:

for repo in gh.repos.list(user=author).all():
   ...
   contributors = repo.list_contributors(user=repo.owner.login, repo=repo.name).all()

它适用于99%的情况,但当我遇到空的存储库时,它崩溃了,我无法找到任何方法来检测'它

2 个答案:

答案 0 :(得分:1)

根据this blog post,空存储库的贡献者端点响应代码为204 No Content

以下是一些相关的curl输出:

curl -v https://api.github.com/repos/poelzi/vaultfs/stats/contributors 
*   Trying 192.30.252.127...
* Connected to api.github.com (192.30.252.127) port 443 (#0)
* found 187 certificates in /etc/ssl/certs/ca-certificates.crt
* found 758 certificates in /etc/ssl/certs
* ALPN, offering http/1.1
...
< HTTP/1.1 204 No Content
< Server: GitHub.com
< Date: Wed, 28 Oct 2015 20:10:10 GMT
< Status: 204 No Content
...

检查pygithub文档,我看到它已经内置了:

  

Repository.get_stats_contributors()

     

调用GET /repos/:owner/:repo/stats/contributors结束点。

     

这是调用此终点的唯一方法。

     

此方法在空存储库中返回None,在尚未计算统计信息时返回空列表。

     

返回类型:无或Repository.StatsContributor

列表

所以,据说,你必须检查返回值。如果没有,则存储库为空。

答案 1 :(得分:0)

您在 PyGithub 标记下的问题,所以下面是在该库中执行此操作的可能方法之一。

import github
from github import GithubException

g = github.Github(token)

# or if you are using login and password g = github.Github(login, password)
repo = g.get_repo("poelzi/vaultfs")

try:
    # get repo content from root directory
    repo.get_contents("/")
except GithubException as e:
    print(e.args[1]['message']) # output: This repository is empty.