python-gitlab raise 500 when get all private MR's

python-gitlab raise 500 when getting all private MR's

我有以下内容:

gl = gitlab.Gitlab(url='https://gitlab.com/',private_token='xxx',api_version=4, session=session)

我什么时候尝试这样做:

mrs = gl.mergerequests.list(scope='all',state='opened',visibility='private')

我得到了:

gitlab.exceptions.GitlabHttpError: 500: 500 Internal Server Error

我尝试增加超时,重试,retry_transient_errors=True。

但我仍然遇到同样的错误。

我想要实现的是,无论我是否创建它,我都想列出所有私有项目的 MR。

还有吗?

GitlabHttpError: 500 表示 gitlab 响应了 500 错误。最可能的原因是您一次请求的数据过多。

这里的一个关键问题是 visibility 不是此方法的有效关键字,因此将被完全忽略。这意味着,实际上,您要求 GitLab.com 上的所有打开的合并请求,这对于单个请求中的 return 来说是太多的数据,因此 GitLab 退出并 return 500.

要查看有效的关键字列表,请参阅 merge requests API documentation

很遗憾,这个API不支持分页。作为解决此问题的方法,您可以首先使用 list projects API 列出您的相关项目,其中 支持 visibility 作为过滤器。对于每个项目,您可以列出其所有合并请求。

因为这些端点是分页的,所以无论有多少项目或 MR,您都可以请求它们(多个分页请求,由 python-gitlab 包装器处理)

all_private_mrs = []
for project in gl.projects.list(visibility='private', as_list=False):
    for mr in project.mergerequests.list(as_list=False, state='opened'):
        print(mr)
        all_private_mrs.append(mr)

要加快速度,您可以增加 per_page 参数并使用 keyset pagination.