You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 09:35:08