Rally python SDKであるpyralを使用しており、クエリ文字列をタプルでフォーマットしていますが、3つ以上の用語があると失敗するようです。これが私のテストコードです:
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はクエリパラメータの辞書もサポートしているようですが、ドキュメント化されておらず、必要ないため、この場合の回避策は作成しませんでした。