Skip to main content
 首页 » 编程设计

python之带有两个以上术语的查询的 Rally pyral sdk 错误。 (解析表达式时出错——预期为 ")",但看到的却是 "AND"。)

2024年08月29日33yxwkf

我正在使用 pyral, the Rally python SDK ,我用一个元组格式化我的查询字符串,但似乎任何时候我有两个以上的术语都会失败。这是我的测试代码:

import pyral 
 
rally = pyral.Rally('rally1.rallydev.com', 'user@example.com', 'password') 
 
user = rally.getUserInfo(name='User Name').pop(0) 
wksp = rally.getWorkspace() 
proj = rally.getProject() 
 
print user.FirstName, user.LastName 
print wksp.Name 
print proj.Name 
 
queryStrings = ( 
('State != "Closed"', 'Owner = ' + user.ref), 
('State != "Fixed"', 'Owner = ' + user.ref), 
('State != "Closed"', 'State != "Fixed"'), 
('State != "Closed"', 'State != "Fixed"', 'Owner = ' + user.ref), 
('State != Closed', 'State != Fixed', 'State != Submitted'), 
('State != Fixed', 'ScheduleState != Tested'), 
('State != Fixed', 'Owner = ' + user.ref, 'ScheduleState != Tested'), 
) 
 
for query in queryStrings: 
    print "++++++++++++++++++++++++++++++++++++++++++" 
    print "Query:",query 
    defects = rally.get("Defect", True, query=query) 
    print "Number of results:",defects.resultCount 
    print "Errors:", defects.errors 
    print 

这是结果输出

User Name 
A Workspace 
Web Project 
++++++++++++++++++++++++++++++++++++++++++ 
Query: ('State != "Closed"', u'Owner = user/1234567890') 
QUERYJUNK: ((State != "Closed") AND (Owner = user/1234567890)) 
Number of results: 25 
Errors: [] 
 
++++++++++++++++++++++++++++++++++++++++++ 
Query: ('State != "Fixed"', u'Owner = user/1234567890') 
QUERYJUNK: ((State != "Fixed") AND (Owner = user/1234567890)) 
Number of results: 89 
Errors: [] 
 
++++++++++++++++++++++++++++++++++++++++++ 
Query: ('State != "Closed"', 'State != "Fixed"') 
QUERYJUNK: ((State != "Closed") AND (State != "Fixed")) 
Number of results: 149 
Errors: [] 
 
++++++++++++++++++++++++++++++++++++++++++ 
Query: ('State != "Closed"', 'State != "Fixed"', u'Owner = user/1234567890') 
QUERYJUNK: ((State != "Closed") AND (State != "Fixed") AND (Owner = user/1234567890)) 
Number of results: 0 
Errors: [u'Could not parse: Error parsing expression -- expected ")" but saw "AND"       instead.'] 
 
++++++++++++++++++++++++++++++++++++++++++ 
Query: ('State != Closed', 'State != Fixed', 'State != Submitted') 
QUERYJUNK: ((State != Closed) AND (State != Fixed) AND (State != Submitted)) 
Number of results: 0 
Errors: [u'Could not parse: Error parsing expression -- expected ")" but saw "AND" instead.'] 
 
++++++++++++++++++++++++++++++++++++++++++ 
Query: ('State != Fixed', 'ScheduleState != Tested') 
QUERYJUNK: ((State != Fixed) AND (ScheduleState != Tested)) 
Number of results: 247 
Errors: [] 
 
++++++++++++++++++++++++++++++++++++++++++ 
Query: ('State != Fixed', u'Owner = user/1234567890', 'ScheduleState != Tested') 
QUERYJUNK: ((State != Fixed) AND (Owner = user/1234567890) AND (ScheduleState !=     Tested)) 
Number of results: 0 
Errors: [u'Could not parse: Error parsing expression -- expected ")" but saw "AND" instead.'] 

QUERYJUNK 是 Rally SDK 在将其发送到 rally 服务之前构建的查询字符串的输出。

编辑:

由于根据 Kyle 的回答,这是 SDK 本身的错误,因此我在我的脚本中创建了一个解决方法,直到 SDK 可以被修复。

def buildQueryString(querySequence): 
if type(query) in [types.ListType, types.TupleType]: 
    seq = ["(%s)" % (s,) for s in querySequence] 
    qs = "%s" % seq.pop(0) 
    for qt in seq: 
        qs = "(%s AND %s)" % (qs, qt) 
    print "QS:",qs 
    return qs 
 
return querySequence 

然后我将这个生成的字符串传递给 API,现在一切似乎都正常了。看起来 API 也支持查询参数的字典,但由于它没有记录,而且我不需要它,所以我没有为这种情况创建解决方法。

请您参考如下方法:

这似乎是 pyral 生成包含 2 个以上子句的查询字符串的错误。

目前是:

((State != Closed) AND (State != Fixed) AND (State != Submitted)) 

应该是:

(((State != Closed) AND (State != Fixed)) AND (State != Submitted)) 

我们将努力尽快修复此问题并在 github 上开源,以便社区可以更好地解决此类问题。