如何通过REST API更新Rally Project的状态?

时间:2014-04-03 16:30:04

标签: python api rest rally pyral

多年来,我们已经在拉力赛中创建并关闭了大量项目。因为您无法完全删除项目,所以我发现需要重新打开已关闭的项目,修改一些工件并重新关闭项目。我正在尝试做的一个简单示例反映在Python的这一部分:

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

因此,如果项目的“State”为“Closed”,则将JSON对象POST到Project的API URL,将其设置为“Open”。

它不起作用。我收到了这个回复:

{
    "OperationResult": {
        "Errors": [
            "Cannot set attribute on a com.rallydev.webservice.json.JSONSingleProperty"
        ],
        "Warnings": [],
        "_rallyAPIMajor": "2",
        "_rallyAPIMinor": "0"
    }
}

是否有其他方法可以通过Rally WS API打开/关闭项目?

1 个答案:

答案 0 :(得分:2)

可能有两个问题。

首先,几年前进行了性能优化,限制了对打开项目的查询。此时,获取已关闭项目列表的唯一方法是在UI中的给定工作空间的“项目”页面上。当我们查询项目时,WS API仅返回打开的项目。尝试不检查此条件state == "Closed"

但是,只要直接访问项目端点,就应该可以重新打开项目。我没有尝试使用Python,但是使用浏览器REST Client我重新打开了一个项目,如下所示:

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"
}}

这很有效。

其次,security token必须附加到帖子请求中,但这还不够。请确保您维护会话cookie,因为与浏览器REST客户端中的方案不同,浏览器会自动维护会话,在您的方案中情况并非如此。见this StackOverflow post