2

我正在使用 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% 的情况,但是当我遇到空存储库时,它崩溃了,我找不到任何“检测”它的方法。

4

2 回答 2

2

您在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.
于 2016-11-22T13:55:53.880 回答
1

根据这篇博客文章,空存储库的贡献者端点响应代码是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

因此,话虽如此,您必须检查返回值。如果没有,则存储库为空。

于 2015-10-28T20:14:29.950 回答