我正在用Python为Grafana创建一个json数据源。它将从JIRA中获取信息,并作为Grafana的表格呈现。我希望表的创建是动态的,因此我希望能够动态分配我抓取的字段。我发现到目前为止可行的唯一方法是使用eval()
...
有人可以为我指出更好的解决方案吗?我看过getattr
和setattr
,但是我不明白如何使用它,或者它没有满足我的需求。
下面的示例仅将其用于priority
:
priority = 'issue.fields.priority.name'
for issue in self.jira.search_issues(jql, maxResults=False):
if issue.fields.assignee:
issuelist.append([issue.key, issue.fields.assignee.displayName, eval(priority)])
else:
issuelist.append([issue.key, 'Unassigned', eval(priority)])
答案 0 :(得分:2)
IIUC,您可以通过以下方式使用getattr:
设置
class Priority:
def __init__(self, name):
self.name = name
class Fields:
def __init__(self, priority):
self.priority = priority
class Issue:
def __init__(self, fields):
self.fields = fields
代码
from functools import reduce
priority = 'issue.fields.priority.name'
issue = Issue(Fields(Priority("high")))
print(eval(priority))
print(reduce(getattr, priority.split('.')[1:], issue))
输出
high
high
因此,您可以在代码中进行更改:
issuelist.append([issue.key, 'Unassigned', eval(priority)])
收件人:
issuelist.append([issue.key, 'Unassigned', reduce(getattr, priority.split('.')[1:], issue)])