mirror of
https://pagure.io/fm-orchestrator.git
synced 2026-04-05 11:48:33 +08:00
Add a "short" query parameter to show less detail on the "module-builds" API
This commit is contained in:
@@ -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),
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user