Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何更新拉力赛项目';通过RESTAPI的状态是什么?_Python_Api_Rest_Rally_Pyral - Fatal编程技术网

Python 如何更新拉力赛项目';通过RESTAPI的状态是什么?

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

多年来,我们在Rally创建并关闭了大量项目。因为实际上不能完全删除项目,所以我发现需要重新打开已关闭的项目,修改一些工件,然后重新关闭项目。我尝试做的一个简单示例反映在这段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
因此,如果项目的“状态”为“关闭”,则将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有效负载搞错了:将它包装在一个“项目”对象中,正如上面所示,它工作得非常好。谢谢