From 4509367d3eeb3a57f32b4967fafb204c9f7b690e Mon Sep 17 00:00:00 2001 From: Ralph Bean Date: Fri, 3 Mar 2017 15:59:17 -0500 Subject: [PATCH] Use JSON for component API instead of strings. This is more flexible and is nicer to other programs that try to parse or consume this data. --- module_build_service/models.py | 17 +++++-- tests/test_views/test_views.py | 92 ++++++++++++++++++++++++++-------- 2 files changed, 84 insertions(+), 25 deletions(-) diff --git a/module_build_service/models.py b/module_build_service/models.py index 0bbef24e..962a09e6 100644 --- a/module_build_service/models.py +++ b/module_build_service/models.py @@ -274,7 +274,6 @@ class ModuleBuild(MBSBase): return None def api_json(self): - return { "id": self.id, "state": self.state, @@ -294,9 +293,19 @@ class ModuleBuild(MBSBase): """ tasks = dict() if self.id and self.state != 'init': - - for build in ComponentBuild.query.filter_by(module_id=self.id).options(lazyload('module_build')).all(): - tasks["%s/%s" % (build.format, build.package)] = "%s/%s" % (build.task_id, build.state) + for build in ComponentBuild.query\ + .filter_by(module_id=self.id)\ + .options(lazyload('module_build'))\ + .all(): + tasks[build.format] = tasks.get(build.format, {}) + tasks[build.format][build.package] = dict( + task_id=build.task_id, + state=build.state, + state_reason=build.state_reason, + nvr=build.nvr, + # TODO -- it would be really nice from a UX PoV to get a + # link to the remote task here. + ) return tasks diff --git a/tests/test_views/test_views.py b/tests/test_views/test_views.py index 6bfd62ee..1bd34f29 100644 --- a/tests/test_views/test_views.py +++ b/tests/test_views/test_views.py @@ -88,6 +88,7 @@ class MockedSCM(object): class TestViews(unittest.TestCase): + maxDiff = None def setUp(self): self.client = app.test_client() @@ -108,11 +109,22 @@ class TestViews(unittest.TestCase): self.assertEquals(data['owner'], 'Moe Szyslak') self.assertEquals(data['state'], 3) self.assertEquals(data['state_reason'], None) - self.assertEquals(data['tasks'], { - 'rpms/module-build-macros': '12312321/1', - 'rpms/nginx': '12312345/1' - } - ) + self.assertDictEqual(data['tasks'], { + 'rpms': { + 'module-build-macros': { + 'task_id': 12312321, + 'state': 1, + 'state_reason': None, + 'nvr': 'module-build-macros-01-1.module_nginx_1_2', + }, + 'nginx': { + 'task_id': 12312345, + 'state': 1, + 'state_reason': None, + 'nvr': 'nginx-1.10.1-2.module_nginx_1_2', + }, + }, + }) self.assertEquals(data['time_completed'], '2016-09-03T11:25:32Z') self.assertEquals(data['time_modified'], '2016-09-03T11:25:32Z') self.assertEquals(data['time_submitted'], '2016-09-03T11:23:20Z') @@ -137,11 +149,22 @@ class TestViews(unittest.TestCase): self.assertEquals(data['state_trace'][0]['state_name'], 'done') self.assertEquals(data['state_url'], '/module-build-service/1/module-builds/1') self.assertEquals(data['stream'], '1') - self.assertEquals(data['tasks'], { - 'rpms/module-build-macros': '12312321/1', - 'rpms/nginx': '12312345/1' - } - ) + self.assertDictEqual(data['tasks'], { + 'rpms': { + 'module-build-macros': { + 'task_id': 12312321, + 'state': 1, + 'state_reason': None, + 'nvr': 'module-build-macros-01-1.module_nginx_1_2', + }, + 'nginx': { + 'task_id': 12312345, + 'state': 1, + 'state_reason': None, + 'nvr': 'nginx-1.10.1-2.module_nginx_1_2', + }, + }, + }) self.assertEquals(data['time_completed'], u'Sat, 03 Sep 2016 11:25:32 GMT') self.assertEquals(data['time_modified'], u'Sat, 03 Sep 2016 11:25:32 GMT') self.assertEquals(data['time_submitted'], u'Sat, 03 Sep 2016 11:23:20 GMT') @@ -176,11 +199,22 @@ class TestViews(unittest.TestCase): self.assertEquals(item['name'], 'nginx') self.assertEquals(item['owner'], 'Moe Szyslak') self.assertEquals(item['state'], 3) - self.assertEquals(item['tasks'], { - 'rpms/module-build-macros': '12312321/1', - 'rpms/nginx': '12312345/1' - } - ) + self.assertDictEqual(item['tasks'], { + 'rpms': { + 'module-build-macros': { + 'task_id': 12312321, + 'state': 1, + 'state_reason': None, + 'nvr': 'module-build-macros-01-1.module_nginx_1_2', + }, + 'nginx': { + 'task_id': 12312345, + 'state': 1, + 'state_reason': None, + 'nvr': 'nginx-1.10.1-2.module_nginx_1_2', + }, + }, + }) self.assertEquals(item['time_completed'], '2016-09-03T11:25:32Z') self.assertEquals(item['time_modified'], '2016-09-03T11:25:32Z') self.assertEquals(item['time_submitted'], '2016-09-03T11:23:20Z') @@ -283,12 +317,28 @@ class TestViews(unittest.TestCase): self.assertTrue(data['state_trace'][0]['time'] is not None) self.assertEquals(data['state_trace'][0]['state'], 1) self.assertEquals(data['state_trace'][0]['state_name'], 'wait') - self.assertEquals(data['tasks'], { - u'rpms/perl-List-Compare': u'None/None', - u'rpms/perl-Tangerine': u'None/None', - u'rpms/tangerine': u'None/None' - } - ) + self.assertDictEqual(data['tasks'], { + 'rpms': { + 'perl-List-Compare': { + 'task_id': None, + 'state': None, + 'state_reason': None, + 'nvr': None, + }, + 'perl-Tangerine': { + 'task_id': None, + 'state': None, + 'state_reason': None, + 'nvr': None, + }, + 'tangerine': { + 'task_id': None, + 'state': None, + 'state_reason': None, + 'nvr': None, + }, + }, + }) mmd = _modulemd.ModuleMetadata() mmd.loads(data["modulemd"])