2017-02-10 2 views
1

Для того, чтобы очистить ралли я хочу, чтобы изменить родитель для проектов, которые помечены как "Closed"Retreiving дочерних проектов и обновления родителя для выбранных проектов в ралли с использованием API

--MyWorkspace 
    - Project 1 
    - Project 2 
    - Child 1 (Status = Closed) 
    - Child 2 (Status = Closed) 
    - Child 3 (Status = Open) 
    - Project 3 

Я хочу обновить родитель "Child 1" and "Child 2" to "Project 1" (Хочет переместить эти дочерние проекты под разным родителем.

import sys 
from pyral import Rally, rallyWorkset 
options = [arg for arg in sys.argv[1:] if arg.startswith('--')] 
args = [arg for arg in sys.argv[1:] if arg not in options] 
server = <server> 
apikey = <api_key> 
workspace = <workspace> 
project = <project_name> 
rally = Rally(server,apikey=apikey, workspace=workspace, project=project) 
rally.enableLogging('mypyral.log') 

Я использую ниже метод для проверки всех проектов в рамках требуемого рабочего пространства

projects = rally.getProjects(workspace=workspace) 
for proj in projects: 
    print (" %12.12s %s %s" % (proj.oid, proj.Name, proj.State)) 

Это дает мне проекты родительского уровня только

<id> <Name> <status> 

Этой логика не возвращают все дочерние проекты, хотя.

Также я ищу post метод обновления родителей, как только я получу список проектов, которые хочу закрыть.

ответ

1

Это правильно - projects = rally.getProjects(workspace=workspace) возвращает все проекты родителей.

Для того, чтобы все дети Проекты вы должны спросить об этом родителя:

for proj in projects: 
children = proj.Children 
for child in children: 
    print (" %12.12s %s %s" % (child.oid, child.Name, child.State)) 

Вся задача я бы решить следующим образом:

#get object for 'New Parent': 
target_project = rally.getProject('NewParentForClosedProjects') 

projects = rally.getProjects(workspace=workspace) 
for proj in projects: 

    #get children of project 
    children = proj.Children 

    for child in children: 

     #if project closed: 
     if child.State == 'Closed': 
      #Then update Parent to new one: 
      project_fields = { 
       "ObjectID": child.oid, 
       "Parent": target_project.ref 
      } 
      try: 
       result = rally.update('Project', project_fields) 
       print "Project %s has been successfully updated with new %s parent" % (str(child.Name), str(child.Parent)) 
      except RallyRESTException, ex: 
       print "Update failure for Project %s" % (str(child.Name)) 
       print ex 
Смежные вопросы