我正在尝试编写一个JIRA查询来查询一堆缺陷。我遇到的问题是,如果我查询的缺陷列表中有一个JQL关键字,整个查询将失败并吐出以下错误:
JiraError HTTP 400 - text: Error in the JQL Query: 'update' is a reserved JQL word.
You must surround it in quotation marks to use it in a query.
我的查询:
jira.search_issues( 'key in ({})'.format(','.join(defects))),
validate_query=false,
maxResults = MAX_JIRA_RESULTS )
如果缺陷包含以下字词,则会失败:' update'。现在这是一个糟糕的数据错误,但我想确保查询能够容忍恶意输入。
现在我能想到的唯一方法是确保此错误不会再次发生,这是为了确保包含JIRA关键字的每个缺陷都有该关键字转义。这显然非常繁琐,如果添加任何新的JQL关键字,则可能会失败。
除了转义我在字符串中找到的每个JIRA关键字之外,还有更好的方法吗?另外,在Python中有一种简单的方法来获取JIRA关键字吗?
谢谢!
答案 0 :(得分:1)
首先,您可以引用您传递给该特定查询的任何内容,因此您不必关心什么是保留字。例如,这有效:
key in ("abc-1","def-2")
如果你要替换“#34;更新"在那里,它会消除你抱怨的具体错误......但不幸的是,你得到另一个错误:The issue key 'update' for field 'key' is invalid.
幸运的是,有一个更好的解决方案。您的问题表明您正在使用问题密钥。 JIRA问题密钥的格式始终为:
<PROJECT>-<ISSUENUM>
PROJECT
的格式为explicitly defined by JIRA,即:
- 第一个字符必须是字母
- 项目密钥中使用的所有字母必须来自现代罗马字母和大写字母,
- 只能使用字母,数字或下划线字符。
您可以将与问题密钥正则表达式匹配的任何内容列入白名单,而不是将所有其他内容列入白名单。
请注意,尽管JIRA系统管理员可以在这些指南之外更改项目正则表达式格式,但这种情况相对不常见(并且Atlassian不支持在该配置中运行JIRA)。