web: fix multiple builds query parameters for a single column

This change fixes builds query parameters when using multiple option for
a single column. The filter logic needs to extend the values instead of
appending a list. Otherwise the query fail with:
pymysql.err.InternalError: (1241, 'Operand should contain 1 column(s)')

Change-Id: Icc5bee1e7f9eaee43489a543f5459708a0ed930e
This commit is contained in:
Tristan Cacqueray 2018-08-20 11:57:39 +00:00
parent da0baca57c
commit 23d0a25d4f
2 changed files with 11 additions and 2 deletions

View File

@ -664,5 +664,10 @@ class TestBuildInfo(ZuulDBTestCase, BaseTestWeb):
resp = self.get_url("api/tenant/tenant-one/build/1234")
self.assertEqual(404, resp.status_code)
builds_query = self.get_url("api/tenant/tenant-one/builds?"
"project=org/project&"
"project=org/project1").json()
self.assertEqual(len(builds_query), 6)
resp = self.get_url("api/tenant/non-tenant/builds")
self.assertEqual(404, resp.status_code)

View File

@ -402,12 +402,16 @@ class ZuulWebAPI(object):
"patchset", "ref", "newrev"):
v = locals()[k]
if v:
args['buildset_filters'].setdefault(k, []).append(v)
if not isinstance(v, list):
v = [v]
args['buildset_filters'].setdefault(k, []).extend(v)
for k in ("uuid", "job_name", "voting", "node_name",
"result"):
v = locals()[k]
if v:
args['build_filters'].setdefault(k, []).append(v)
if not isinstance(v, list):
v = [v]
args['build_filters'].setdefault(k, []).extend(v)
data = connection.get_builds(args)
resp = cherrypy.response
resp.headers['Access-Control-Allow-Origin'] = '*'