Python 替换Rally中模板故事的字符串

Python 替换Rally中模板故事的字符串,python,rally,Python,Rally,我可以用我的Python代码成功地获取用户故事信息;但是,我想替换详细信息和用户故事名称中的特定字符串。例如,字符串可以是$projectName,我想用用户输入的值替换它 是否有一些东西可以帮助编写代码,或者有一个工作示例?我被卡住了,因为这不一定是一个要编辑的文件,层次输出也为我创建了一个块来开发一些有用的东西 以下是我提取数据的代码: #!/usr/bin/env python import sys from pyral import Rally, rallyWorkset option

我可以用我的Python代码成功地获取用户故事信息;但是,我想替换详细信息和用户故事名称中的特定字符串。例如,字符串可以是$projectName,我想用用户输入的值替换它

是否有一些东西可以帮助编写代码,或者有一个工作示例?我被卡住了,因为这不一定是一个要编辑的文件,层次输出也为我创建了一个块来开发一些有用的东西

以下是我提取数据的代码:

#!/usr/bin/env python
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, username, password, apikey, workspace, project = rallyWorkset(options)
if apikey:
        rally = Rally(server, apikey=apikey, workspace=workspace, project=project)
else:
        rally = Rally(server, username=username, password=password, workspace=workspace, project=project)
response = rally.get ('UserStory', fetch=True, query='Name contains "$projecttest"')
for story1 in response:
    print story1.details()

这是我得到的输出,当然是擦洗过的:

HierarchicalRequirement
    oid                       : 81284473268
    ref                       : hierarchicalrequirement/81284473268
    ObjectID                  : 81284473268
    ObjectUUID                : 67c952b4-e414-4759-a8c5-d7d7543ba98d
    _ref                      : https://rally1.rallydev.com/slm/webservice/v2.0/hierarchicalrequirement/81284473268
    _CreatedAt                : Dec 14, 2016
    _hydrated                 : True
    Name                      : Robert - test - pyRal - $projecttest
    Subscription              : <<SCRUBBED>>
    Workspace                 : Workspace.ref          (OID  SCRUBBED)
    FormattedID               : US47008

    AcceptedDate              : None
    Attachments               : []
    Blocked                   : False
    BlockedReason             : None
    Blocker                   : None
    Changesets                : []
    Children                  : []
    CreationDate              : 2016-12-14T18:21:03.663Z
    DefectStatus              : NONE
    Defects                   : []
    Description               : <b>Description</b><div><br /><div>Some format here</div><div><br /></div><div><b>Outcome</b></div><div><b><br /></b></div><div>Some outcome here</div></div>
    DirectChildrenCount       : 0
    Discussion                : []
    DisplayColor              : #21a2e0
    DragAndDropRank           : O~zbf~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Expedite                  : False
    Feature                   : None
    HasParent                 : False
    InProgressDate            : None
    Iteration                 : None
    LastBuild                 : None
    LastRun                   : None
    LastUpdateDate            : 2016-12-19T22:42:48.173Z
    LatestDiscussionAgeInMinutes  : None
    Milestones                : []
    Notes                     : 
    Owner                     : User.ref  (OID  SCRUBBED)
    Package                   : None
    Parent                    : None
    PassingTestCaseCount      : 0
    PlanEstimate              : None
    PortfolioItem             : None
    Predecessors              : []
    Project                   : Project.ref                 (OID  SCRUBBED)
    Ready                     : False
    Recycled                  : False
    Release                   : None
    ScheduleState             : Ungroomed
    ScheduleStatePrefix       : U
    Successors                : []
    Tags                      : []
    TaskActualTotal           : 0.0
    TaskEstimateTotal         : 0.0
    TaskRemainingTotal        : 0.0
    TaskStatus                : NONE
    Tasks                     : []
    TestCaseCount             : 0
    TestCaseStatus            : NONE
    TestCases                 : []
    VersionId                 : 4
    __collection_ref_for_RevisionHistory  : SCRUBBED
    _refObjectUUID            : SCRUBBED
    AcceptanceCriteria        : None
    IGNOREAcceptanceCriteria  : None
    IdeaURL                   : <pyral.entity.CustomField object at 0x7f1afb79a190>
    IdeaVotes                 : None
    JIRAPriority              : None
    JiraKey                   : None
    JiraLink                  : None
    KanbanState               : None
    Priority                  : None
    ReleaseNote               : None
    RequestedDate             : None
    SNRequest                 : None
    Submitter                 : None
    TestRailPlanID            : None
    TrackingState             : None
HierarchicalRequirement
oid:81284473268
参考:层次要求/81284473268
目标:81284473268
ObjectUUID:67c952b4-e414-4759-a8c5-d7d7543ba98d
_参考:https://rally1.rallydev.com/slm/webservice/v2.0/hierarchicalrequirement/81284473268
_创建日期:2016年12月14日
_水合的:真的
名称:Robert-test-pyRal-projecttest
订阅:
工作空间:Workspace.ref(OID已清除)
格式化ID:US47008
接受日期:无
附件:[]
阻止:错误
阻塞原因:无
拦截器:没有
变更集:[]
儿童:[]
创作日期:2016-12-14T18:21:03.663Z
缺陷状态:无
缺陷:[]
描述:描述
此处的某些格式
结果
此处的某些结果 DirectChildrenCount:0 讨论:[] 显示颜色:#21a2e0 DragAndDropRank:O~zbf~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 加急:错 特色:无 父母:错 InProgressDate:无 迭代:无 最新版本:无 最后一轮:无 最新更新日期:2016-12-19T22:42:48.173Z 最新讨论时间分钟:无 里程碑:[] 笔记: 所有者:User.ref(OID已清除) 套餐:无 家长:没有 PassingTestCaseCount:0 飞机估计:无 投资组合项目:无 前任:[] 项目:Project.ref(OID已清除) 就绪:错误 回收:假 发布:无 计划状态:未分配 ScheduleStatePrefix:U 继任者:[] 标签:[] TaskActualTotal:0.0 任务估计总数:0.0 TaskRemainingTotal:0.0 任务状态:无 任务:[] TestCaseCount:0 TestCaseStatus:无 测试用例:[] 版本ID:4 __修订历史记录的集合参考:已清除 _REOBJECTUID:已擦洗 验收标准:无 忽略接受标准:无 艾德尔: IdeaVotes:无 JIRAPriority:无 吉拉基:没有 吉尔林克:没有 看板状态:无 优先权:无 发布说明:无 请求日期:无 请求:无 提交人:无 TestRailPlanID:无 跟踪状态:无
=====================================================

因此,对于PyRal,我必须向该代码提取的每个用户故事发送更新,仅在包含字符串的行上;但是,我必须以某种方式存储每个FormattedID:和要更新的关联Name:字段,这就是我遇到的问题,即如何实际存储该字段,以便对其进行迭代和更新。

您可以使用模板字符串,该字符串完全按照您的要求执行,使用env变量(如分隔模板标记):

from string import Template
s = Template('this is $projectName')
s.substitute(projectName='THE_PROJECT')
结果:

'this is THE_PROJECT'

另一种方法是,如果将
projectName
用大括号括起来,则使用
格式

s = 'this is {projectName}'
print(s.format(projectName='THE_PROJECT'))
您可以使用模板字符串,该字符串完全按照您的要求执行,使用env变量(如)来分隔模板标记:

from string import Template
s = Template('this is $projectName')
s.substitute(projectName='THE_PROJECT')
结果:

'this is THE_PROJECT'

另一种方法是,如果将
projectName
用大括号括起来,则使用
格式

s = 'this is {projectName}'
print(s.format(projectName='THE_PROJECT'))

如果您只是想替换字符串中的
$projectName
之类的内容,这不是一项困难的任务,但您还没有向我们展示任何尝试。尝试使用正则表达式和
re
模块。很抱歉,我很忙,我已经更新了我的帖子。如果您只是想在字符串中替换
$projectName
之类的内容,这不是一项困难的任务,但您没有向我们展示任何尝试。尝试使用正则表达式和
re
模块。很抱歉,我赶时间,我已经更新了我的帖子。谢谢!我想了想,;然而,使用PyRal,我必须单独打电话更新记录;因此,我需要存储FOrmattedID和名称,然后只编辑名称中的字符串,并将更新应用到相应的FOrmattedID(故事)。谢谢!我想了想,;然而,使用PyRal,我必须单独打电话更新记录;因此,我需要存储FOrmattedID和名称,然后只编辑名称内的字符串,并将更新应用于相应的FOrmattedID