Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.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 REST:查询所选迭代中的所有任务_Python_Rally_Wsapi - Fatal编程技术网

恢复python REST:查询所选迭代中的所有任务

恢复python REST:查询所选迭代中的所有任务,python,rally,wsapi,Python,Rally,Wsapi,我正在尝试使用用于拉力赛的python工具包查询特定迭代中的所有任务。迭代将在运行时选择 但是,我无法设置正确的查询。我觉得我错过了一些小但重要的东西 代码如下: query_criteria = 'Iteration.Name = "2014 november"' response = rally.get('Task', fetch=True, query=query_criteria) if response.errors: sys.stdout.write("\n".join(re

我正在尝试使用用于拉力赛的python工具包查询特定迭代中的所有任务。迭代将在运行时选择

但是,我无法设置正确的查询。我觉得我错过了一些小但重要的东西

代码如下:

query_criteria = 'Iteration.Name = "2014 november"'
response = rally.get('Task', fetch=True, query=query_criteria)
if response.errors:
    sys.stdout.write("\n".join(response.errors))
    sys.exit(1)
for Task in response:
    if getattr(Task,"Iteration"):
            print "%s %s" % (Task.Name,Task.Iteration.Name)
它将收到0行响应

如果我删除
,query=query\u criteria
并获取所有任务,那么我可以看到Task.Iteration.Name值为2014年11月的任务

查询没有给出错误,因此我假设相关对象(任务->迭代)的值能够包含在查询中。但我收到0行响应

原因可能是某些任务似乎没有附加到迭代中吗


一种解决方案是获取所有任务,然后过滤它们。但这看起来很肮脏

如果直接在浏览器中的WS-API中查询,会得到结果吗

https://rally1.rallydev.com/slm/webservice/v2.0/task?workspace=https://rally1.rallydev.com/slm/webservice/v2.0/workspace/12352608129&query=(Iteration.Name%20%3D%20%22my%20iteration%22)&pagesize=200
我验证了这段代码与pyral 1.1.0、Python2.7.0和requests-2.3.0一起工作——它返回分配给迭代的工作产品的所有任务(例如用户故事和缺陷)。我测试了3个查询:按状态、按迭代引用和按迭代名称(前两个在代码中注释掉)


https://community.rallydev.com/slm/webservice/v2.0/Task?fetch=FormattedID,State,Name&query=(Iteration.Name%20=%20%222014%201112%22)&order=FormattedID&pagesize=200&start=1
给了我0个结果。wsapi文档页面上的交互式查询框也是如此。尝试您的代码(将迭代名称替换为“2014年11月”),并获得0个符合条件的任务。还通过迭代引用进行了测试。还是一样。所以我有点迷路了。这可能是对社区版用户的限制吗?听起来似乎不太合理,但我完全没有主意。如果您的WS-API查询返回0个结果,那么它与python代码无关。这意味着2014年11月迭代中没有计划的工件,或者迭代名称拼写错误(例如,2014年和11月之间有多余或缺少空格)。按迭代查询。ObjectID(除非您在按迭代引用时已经这样做)要获得迭代的ObjectID,请转到该迭代的详细信息页面,并使用URL中的最后一串数字,例如ObjectID为7890。
#!/usr/bin/env python

#################################################################################################
#
#  showitems -- show artifacts in a workspace/project conforming to some common criterion
#
#################################################################################################

import sys, os
from pyral import Rally, rallyWorkset, RallyRESTAPIError

#################################################################################################

errout = sys.stderr.write

#################################################################################################

def main(args):
    options = [opt for opt in args if opt.startswith('--')]
    args    = [arg for arg in args if arg not in options]
    server, username, password, apikey, workspace, project = rallyWorkset(options)
    if apikey:
        rally = Rally(server, apikey=apikey, workspace=workspace, project=project)
    else:
        rally = Rally(server, user=username, password=password, workspace=workspace, project=project)
    rally.enableLogging("rally.history.showitems")

    fields    = "FormattedID,State,Name"
    #criterion = 'State != Closed'
    #criterion = 'iteration = /iteration/20502967321'
    criterion = 'iteration.Name = \"iteration 5\"'

    response = rally.get('Task', fetch=fields, query=criterion, order="FormattedID",
                                   pagesize=200, limit=400)

    for task in response:
        print "%s  %s  %s" % (task.FormattedID, task.Name, task.State)

    print "-----------------------------------------------------------------"
    print response.resultCount, "qualifying tasks"

#################################################################################################
#################################################################################################

if __name__ == '__main__':
    main(sys.argv[1:])
    sys.exit(0)