Add a "short" query parameter to show less detail on the "module-builds" API

This commit is contained in:
mprahl
2017-11-17 12:39:43 -05:00
parent ef5dc64f2b
commit 0e7dd2dad3
3 changed files with 50 additions and 11 deletions

View File

@@ -383,16 +383,21 @@ class ModuleBuild(MBSBase):
return query.first()
def json(self):
def short_json(self):
return {
'id': self.id,
'state': self.state,
'state_name': INVERSE_BUILD_STATES[self.state],
'state_reason': self.state_reason,
'stream': self.stream,
'version': self.version,
'owner': self.owner,
'name': self.name,
}
def json(self):
json = self.short_json()
json.update({
'state_reason': self.state_reason,
'owner': self.owner,
'rebuild_strategy': self.rebuild_strategy,
'scmurl': self.scmurl,
'time_submitted': _utc_datetime_to_iso(self.time_submitted),
@@ -400,7 +405,8 @@ class ModuleBuild(MBSBase):
'time_completed': _utc_datetime_to_iso(self.time_completed),
'koji_tag': self.koji_tag,
'tasks': self.tasks(),
}
})
return json
def extended_json(self, show_state_url=False):
"""
@@ -414,7 +420,6 @@ class ModuleBuild(MBSBase):
if show_state_url:
state_url = get_url_for('module_build', id=self.id)
json.update({
# TODO, show their entire .json() ?
'component_builds': [build.id for build in self.component_builds],
'modulemd': self.modulemd,
'state_trace': [{'time': _utc_datetime_to_iso(record.state_time),

View File

@@ -93,6 +93,9 @@ class AbstractQueryableBuildAPI(MethodView):
@cors_header()
def get(self, id):
verbose_flag = request.args.get('verbose', 'false').lower()
short_flag = request.args.get('short', 'false').lower()
json_func_kwargs = {}
json_func_name = 'json'
if id is None:
# Lists all tracked builds
@@ -103,9 +106,13 @@ class AbstractQueryableBuildAPI(MethodView):
}
if verbose_flag == 'true' or verbose_flag == '1':
json_data['items'] = [item.extended_json(True) for item in p_query.items]
else:
json_data['items'] = [item.json() for item in p_query.items]
json_func_name = 'extended_json'
json_func_kwargs['show_state_url'] = True
elif short_flag == 'true' or short_flag == '1':
if hasattr(p_query.items[0], 'short_json'):
json_func_name = 'short_json'
json_data['items'] = [getattr(item, json_func_name)(**json_func_kwargs)
for item in p_query.items]
return jsonify(json_data), 200
else:
@@ -113,9 +120,12 @@ class AbstractQueryableBuildAPI(MethodView):
instance = self.model.query.filter_by(id=id).first()
if instance:
if verbose_flag == 'true' or verbose_flag == '1':
return jsonify(instance.extended_json(True)), 200
else:
return jsonify(instance.json()), 200
json_func_name = 'extended_json'
json_func_kwargs['show_state_url'] = True
elif short_flag == 'true' or short_flag == '1':
if getattr(instance, 'short_json', None):
json_func_name = 'short_json'
return jsonify(getattr(instance, json_func_name)(**json_func_kwargs)), 200
else:
raise NotFound('No such %s found.' % self.kind)

View File

@@ -132,6 +132,7 @@ class TestViews(unittest.TestCase):
self.assertEquals(data['id'], 1)
self.assertEquals(data['name'], 'nginx')
self.assertEquals(data['owner'], 'Moe Szyslak')
self.assertEquals(data['stream'], '1')
self.assertEquals(data['state'], 3)
self.assertEquals(data['state_reason'], None)
self.assertDictEqual(data['tasks'], {
@@ -154,6 +155,17 @@ class TestViews(unittest.TestCase):
self.assertEquals(data['time_modified'], '2016-09-03T11:25:32Z')
self.assertEquals(data['time_submitted'], '2016-09-03T11:23:20Z')
self.assertEqual(data['rebuild_strategy'], 'changed-and-after')
self.assertEquals(data['version'], '2')
def test_query_build_short(self):
rv = self.client.get('/module-build-service/1/module-builds/1?short=True')
data = json.loads(rv.data)
self.assertEquals(data['id'], 1)
self.assertEquals(data['name'], 'nginx')
self.assertEquals(data['state'], 3)
self.assertEquals(data['state_name'], 'done')
self.assertEquals(data['stream'], '1')
self.assertEquals(data['version'], '2')
def test_query_build_with_verbose_mode(self):
rv = self.client.get('/module-build-service/1/module-builds/1?verbose=true')
@@ -309,6 +321,18 @@ class TestViews(unittest.TestCase):
self.assertEquals(data['state_reason'], None)
self.assertEquals(data['task_id'], 12312345)
def test_query_component_build_short(self):
rv = self.client.get('/module-build-service/1/component-builds/1?short=True')
data = json.loads(rv.data)
self.assertEquals(data['id'], 1)
self.assertEquals(data['format'], 'rpms')
self.assertEquals(data['module_build'], 1)
self.assertEquals(data['package'], 'nginx')
self.assertEquals(data['state'], 1)
self.assertEquals(data['state_name'], 'COMPLETE')
self.assertEquals(data['state_reason'], None)
self.assertEquals(data['task_id'], 12312345)
def test_query_component_build_verbose(self):
rv = self.client.get('/module-build-service/1/component-builds/3?verbose=true')
data = json.loads(rv.data)