Python 如何更新拉力赛项目';通过RESTAPI的状态是什么?
多年来,我们在Rally创建并关闭了大量项目。因为实际上不能完全删除项目,所以我发现需要重新打开已关闭的项目,修改一些工件,然后重新关闭项目。我尝试做的一个简单示例反映在这段Python中:Python 如何更新拉力赛项目';通过RESTAPI的状态是什么?,python,api,rest,rally,pyral,Python,Api,Rest,Rally,Pyral,多年来,我们在Rally创建并关闭了大量项目。因为实际上不能完全删除项目,所以我发现需要重新打开已关闭的项目,修改一些工件,然后重新关闭项目。我尝试做的一个简单示例反映在这段Python中: resp = session.get('https://rally1.rallydev.com/slm/webservice/v2.0/project/' + ObjectID, auth=HTTPBasicAuth(user, password)) state = resp.json()["Project
resp = session.get('https://rally1.rallydev.com/slm/webservice/v2.0/project/' + ObjectID, auth=HTTPBasicAuth(user, password))
state = resp.json()["Project"]["State"]
if state == "Closed":
info = { "State": "Open" }
resp = session.post('https://rally1.rallydev.com/slm/webservice/v2.0/project/' + ObjectID + '?key=' + token, auth=HTTPBasicAuth(user, password), data=json.dumps(info))
print resp.content
因此,如果项目的“状态”为“关闭”,则将JSON对象发布到项目的API URL,并将其设置为“打开”
它不起作用。我得到的答复是:
{
"OperationResult": {
"Errors": [
"Cannot set attribute on a com.rallydev.webservice.json.JSONSingleProperty"
],
"Warnings": [],
"_rallyAPIMajor": "2",
"_rallyAPIMinor": "0"
}
}
是否有其他方法通过Rally WS API打开/关闭项目?可能有两个问题 首先,几年前进行了一次性能优化,限制了对开放项目的查询。此时,获取已关闭项目列表的唯一方法是在UI中给定工作区的“项目”页面上。当我们查询项目时,WS-API只返回打开的项目。在不检查此条件的情况下尝试
state==“Closed”
但是,只要直接访问项目端点,就应该可以重新打开项目。我没有尝试使用Python,但使用浏览器REST客户端重新打开了一个项目,如下所示:
a) 已从安全终结点获取安全令牌:
https://rally1.rallydev.com/slm/webservice/v2.0/security/authorize
b) 将令牌附加到请求:
终点:
https://rally1.rallydev.com/slm/webservice/v2.0/project/14304671845?key=b2c8aa01-…
有效载荷:
{"Project":{
"State":"Open"
}}
这很有效
第二,必须附加到post请求,但这还不够。请确保维护会话cookie,因为与浏览器REST客户端中浏览器自动维护会话的场景不同,在您的场景中情况并非如此。看 pyral方法“rally.getProjects()”实际上返回已关闭的项目,所以至少这不是问题。至于问题的测试,我只是把POST有效负载搞错了:将它包装在一个“项目”对象中,正如上面所示,它工作得非常好。谢谢