2014-04-03 105 views
2

多年來,我們在拉力賽中創建並關閉了大量項目。因爲你不能完全刪除項目,所以我發現需要重新打開已關閉的項目,修改一些工件並重新關閉項目。什麼,我試圖做一個簡單的例子體現在該位的Python:如何通過REST API更新Rally 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 

所以,如果一個項目的「國家」是「關閉」,POST JSON對象的項目設置的API網址它「打開」。

它不起作用。我得到這個迴應:

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

是否有另一種方式通過Rally WS API打開/關閉項目?

回答

2

可能有兩個問題。

首先,幾年前進行的性能優化限制了打開項目的查詢。此時,獲取已關閉項目列表的唯一方法是在UI中的給定工作區的「項目」頁面上。當我們查詢項目時,WS API只返回打開的項目。嘗試不檢查此情況state == "Closed"

但是,只要直接訪問項目端點,應該可以重新打開項目。我沒有與Python嘗試,但使用的瀏覽器REST客戶端我重新打開了一個項目如下:

一)得到了來自安全端點安全令牌:

https://rally1.rallydev.com/slm/webservice/v2.0/security/authorize 

二)附加令牌到請求:

端點:

https://rally1.rallydev.com/slm/webservice/v2.0/project/14304671845?key=b2c8aa01-...

有效載荷:

{"Project":{ 
"State":"Open" 
}} 

This works。

其次,security token必須附加到帖子請求,但它是不夠的。請確保您維護會話cookie,因爲與瀏覽器REST客戶端中瀏覽器自動維護會話的場景不同,在您的場景中情況並非如此。請參閱this StackOverflow post

+0

pyral方法「rally.getProjects()」事實上會返回已關閉的項目,所以至少這不是問題。而對於這個問題的測試,我只是讓POST有效載荷出錯了:將它包裝在上面顯示的「Project」對象中工作完美。謝謝! –