Python-Redmine在没有问题的项目上



我有一个Redmine项目,它是子项目的容器。此顶级项目没有问题(项目设置中未启用问题跟踪)。

我正试图找出一种方法为Python api检测到这一点。现在,当我的代码(正在扫描问题计数)通过项目时,它会到达这个并出错。

redminelib.exceptions。ForbiddenError:请求的资源被禁止

我可以使用什么项目属性来确定是否启用了"问题"?我试过项目,问题。_total_count,但它的值似乎总是& None"适用于所有项目(即使是有问题的项目)。我认为当你运行问题查询时,这些会被填上。但是我不能运行问题查询而不失败并退出脚本。

我只是想有一些逻辑来跳过这些问题禁用项目。

redmine = Redmine('https://redmine.server/redmine', key='1234567890987654321', requests={'verify': False})
projects = redmine.project.all()
for project in projects:
issues = redmine.issue.filter(project_id=project.identifier, status_id='*')
issueCount = 0
for issue in issues:
issueCount = issueCount + 1
print( 'Project ' + project.identifier + ' has ' + str(issueCount) + ' issues' )

try:
# code assuming issues are enabled
except redminelib.exceptions.ForbiddenError:
# code to execute for projects where issues are disabled

一个项目的已启用模块列表可以从项目API中获取。对于您现有的代码,您可以使用例如

redmine = Redmine('https://redmine.server/redmine', key='1234567890987654321')
# Note that this returns at most 100 projects.
# You may have to use pagination to fetch any further projects
projects = redmine.project.all(include = ['enabled_modules'])
for project in projects:
if next((module for module in project.enabled_modules if module["name"] == "issue_tracking"), None):
continue
# Fetch just one issue
# the returned record set will contain the total number of issues which matched the query
issues = redmine.issue.filter(project_id=project.identifier, status_id='*', limit=1)
issueCount = issues.total_count

print( 'Project ' + project.identifier + ' has ' + str(issueCount) + ' issues' )
# ...

使用此检查,您可以跳过未启用问题模块的项目。

但是请注意,即使模块是启用的,在一个项目中,如果你没有"视图问题",你可能仍然不允许获取任何问题。通过合适的角色在项目中的权限。除了尝试读取问题和处理故障外,我不知道有API来验证这一点。

进一步研究代码,您可以发现对读取所有问题的原始方法有一些改进。在这里,我们最多只读一个问题(我们并不特别关心)。然而,在列表中,Redmine返回与我们的过滤器匹配的问题总数,我们可以在这里使用它,而不必自己读取所有问题。

在任何情况下,请注意Redmine对所有API响应应用限制,并返回最多100个问题/项目/用户/…到单个请求。如果您想获取更多,您必须使用适当的limit/offset参数集发出额外的请求。详见https://www.redmine.org/projects/redmine/wiki/Rest_api#Collection-resources-and-pagination

最新更新