无法使用pyral';提取项目的所有要素数据;s RESTAPI python

无法使用pyral';提取项目的所有要素数据;s RESTAPI python,python,api,rest,rally,pyral,Python,Api,Rest,Rally,Pyral,我正在尝试使用pyral模块读取Rally中一个项目的所有功能数据。总结果集计数为1358,脚本在读取大约700条记录后抛出错误,如下所述 rally1 = Rally(entity='PortfolioItem_Feature',server='rally1.rallydev.com',fetch=True, user='xxx', password='', workspace='xxx/yyy', project='ABC') features = rally1.get('Feature',

我正在尝试使用pyral模块读取Rally中一个项目的所有功能数据。总结果集计数为1358,脚本在读取大约700条记录后抛出错误,如下所述

rally1 = Rally(entity='PortfolioItem_Feature',server='rally1.rallydev.com',fetch=True, user='xxx', password='', workspace='xxx/yyy', project='ABC')
features = rally1.get('Feature',fetch="True",pagesize=2000,start=0,limit=5000)

for feature in features:
    #a=pd.DataFrame(feature)
    print(feature.details())
输出:

PortfolioItem/Feature result set, totalResultSetSize: 1358, startIndex: 1  pageSize: 2000  current Index: 0
I'm getting the following errors:

File "C:\Users\nis\AppData\Roaming\Python\Python38\site-packages\pyral\entity.py", line 397, in details
    (attr_name, cln, value.oid, value.UserName, value.DisplayName)
  File "C:\Users\nis\AppData\Roaming\Python\Python38\site-packages\pyral\entity.py", line 139, in __getattr__
    raise UnreferenceableOIDError("%s OID %s" % (rallyEntityTypeName, self.oid))
pyral.entity.UnreferenceableOIDError: User OID 44012386960
因此,我有以下问题:

  • 如何修复此错误,即跳过读取要素属性的特定字段,或将其替换为空结果集
  • 如何将(a)(b)PortfolioItem/Feature结果集转换为dataframe,而不会出现上述错误
  • 我正在使用下面的代码,这个脚本也会读取大约700条记录,并抛出与上述相同的错误。我尝试使用错误处理,但它仍然会在遇到错误时停止读取。任何帮助都将不胜感激

    r=pd.DataFrame()
    for feature in features:
     a= {
     'OID': feature.oid,
     'FeatureID':feature.FormattedID,
     'Creation_Date': feature.CreationDate,
      'Project_Name': feature.Project.Name,
      'AcceptedLeafStoryPlanEstimateTotal':feature.AcceptedLeafStoryPlanEstimateTotal,
      'AcceptedLeafStoryPlanEstimateTotal':feature.AcceptedLeafStoryPlanEstimateTotal,
      'Feature_payload':feature._ref,
      'Created by':feature.CreatedBy.DisplayName
     }
     #print(a.keys())
     #print(a.values())
     r=r.append(a,ignore_index=True,sort=False)
     print(r)
    

    在我看来,id为44012386960的对象已损坏,因此您必须跳过它

    for feature in features:
        if feature.oid == 44012386960:
            continue
        print(feature.details())
    

    我假设您的错误是一个错误的featureoid,因为它也发生在您的第二个循环中,该循环仅使用feature.oid,但也可能是feature.CreatedBy出现问题,因为您的错误消息表明它是一个错误的用户oid。在这种情况下,我的建议是在循环中打印feature.CreatedBy.oid以查找错误的,并将if改为
    if feature.CreatedBy.oid==44012386960:continue

    我使用python中的三元运算符解决了此问题,如下所示:

    feature_name = '' if feature.Feature is None else feature.Feature.Name
    

    问题是,每当Rally rest api无法引用导致错误的特定功能的oid时。

    第一个答案几乎就是这样说的,坏的功能oid。