如何用pyral按迭代查询Rally?如何筛选已结束迭代的未验证用户故事?
解决pyral查询Rally用户故事的问题
原代码的问题根源
你用Python的and连接两个查询条件是错误的。Python中两个非空字符串做and运算时,会直接返回第二个字符串,导致最终传给pyral的查询条件只剩FlowState.Name != "Validated",迭代条件被直接丢弃,这就是迭代筛选完全无效的原因。
pyral要求查询条件必须是符合Rally查询语法的单个字符串,逻辑关系要用大写的AND/OR连接。
正确的查询写法
1. 按迭代OID筛选+排除Validated状态
把两个条件用AND拼接成一个字符串即可:
user_stories = rally.get( 'UserStory', project='My Project', fetch=True, query='Iteration.OID < "1234" AND FlowState.Name != "Validated"' )
2. 筛选已结束迭代中的目标用户故事
如果不想硬编码迭代OID,直接筛选已结束的迭代,可以用两种方式判断迭代状态:
方式一:用Iteration.State字段判断
Rally中已结束的迭代State字段值为Completed,直接以此为条件:
user_stories = rally.get( 'UserStory', project='My Project', fetch=True, query='Iteration.State = "Completed" AND FlowState.Name != "Validated"' )
方式二:用Iteration.EndDate判断(更精准)
如果担心State字段值有差异,可以通过结束日期早于当前日期来筛选:
from datetime import datetime # 生成符合Rally格式的当前日期字符串 today = datetime.today().strftime("%Y-%m-%d") query = f'Iteration.EndDate < "{today}" AND FlowState.Name != "Validated"' user_stories = rally.get( 'UserStory', project='My Project', fetch=True, query=query )
额外注意事项
- 查询条件里的字段值统一用双引号包裹,外层用单引号或三引号,避免转义问题
- 关联层级字段(比如Iteration下的子字段)直接用
.链式访问即可,pyral会自动处理Rally的API关联查询 - 可以单独测试迭代条件是否生效,比如先只查
Iteration.OID < "1234",确认能返回对应迭代的用户故事后,再叠加状态条件
内容的提问来源于stack exchange,提问作者brogrammer
相关产品推荐
相关产品推荐

