我希望能够查询Rally是否存在现有缺陷,然后复制该缺陷只更改几个字段,同时保留所有附件。有没有简单的方法来做到这一点?我尝试调用rally.create并传递现有的缺陷对象,但未能将所有成员序列化为JSON。最终,如果将pyral扩展到包含这种功能,那将会很好。在Python中使用Rally REST API复制缺陷的首选方法
相反,我写了一些代码来复制现有缺陷的每个python-native属性,然后使用.ref作为其他所有内容。它似乎工作得很好。我已经利用Mark W的代码来复制附件,这也很有效。剩下的一个挫折是复制迭代不起作用。当我打电话.REF的迭代属性,我得到这个:
>>> s
<pyral.entity.Defect object at 0x029A74F0>
>>> s.Iteration
<pyral.entity.Iteration object at 0x029A7710>
>>> s.Iteration.ref
No classFor item for |UserIterationCapacity|
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "c:\python27\lib\site-packages\pyral\entity.py", line 119, in __getattr__
hydrateAnInstance(self._context, item, existingInstance=self)
File "c:\python27\lib\site-packages\pyral\restapi.py", line 77, in hydrateAnInstance
return hydrator.hydrateInstance(item, existingInstance=existingInstance)
File "c:\python27\lib\site-packages\pyral\hydrate.py", line 62, in hydrateInstance
self._setAppropriateAttrValueForType(instance, attrName, attrValue, 1)
File "c:\python27\lib\site-packages\pyral\hydrate.py", line 128, in _setAppropriateAttrValueForType
elements = [self._unravel(element) for element in attrValue]
File "c:\python27\lib\site-packages\pyral\hydrate.py", line 162, in _unravel
return self._basicInstance(thing)
File "c:\python27\lib\site-packages\pyral\hydrate.py", line 110, in _basicInstance
raise KeyError(itemType)
KeyError: u'UserIterationCapacity'
>>>
这是否看起来像拉力赛或或许还有一个自定义字段的一个问题一个问题,我们的项目管理员可能会造成的?我能够通过构建来自oid的ref来解决它:
newArtifact["Iteration"] = { "_ref": "iteration/" + currentArtifact.Iteration.oid }
虽然这让我感觉很不舒服。
是的,我确实看到了这个早期代码。我唯一的预留是在脚本中调用要复制的字段。任何时候,我们的管理员添加一个新的自定义字段(他已知这样做),脚本将需要更新。我想我可以保留一份不要复制的列表,但是我依赖于工件的拉力定义不会改变。 – svvitale
您可以在TypeDefinitions/AttributeDefinitions for Defects上进行额外的查询,并枚举缺陷工件上的自定义字段。然后,您需要修改代码以循环访问这些代码,并将它们添加到要复制的源/目标字段列表中。 – 2013-01-08 18:34:23
今天我花了一些时间与这个战斗没有太大的进展。我如何获得AttributeDefinitions?我能够为缺陷本身获得TypeDefinition,但是没有任何字段信息。我正在考虑只复制每个具有本机Python类型(字符串,数字等)的属性,然后为需要它的字段(迭代,用户,附件等)添加特殊处理的替代方法。你看到这种方法的缺点吗? – svvitale