From 3d00c48448247389ab61f60c68e988bd7a65c5f4 Mon Sep 17 00:00:00 2001 From: Jana Cupova Date: Oct 18 2022 12:23:23 +0000 Subject: Allow buildTagID and destTagID as string and dict in getBuildTargets Fixes: https://pagure.io/koji/issue/3549 --- diff --git a/hub/kojihub.py b/hub/kojihub.py index 5c7a42c..053d763 100644 --- a/hub/kojihub.py +++ b/hub/kojihub.py @@ -3241,8 +3241,13 @@ def _delete_build_target(buildTargetInfo): def get_build_targets(info=None, event=None, buildTagID=None, destTagID=None, queryOpts=None): """Return data on all the build targets + :param int, str, dist info: build target name, ID or dict + :param int event: provide event to query at a different time + :param int, str, dict buildTagID: build tag name, ID or dict + :param int, str, dict destTagID: destination tag name, ID or dict + :param dict queryOpts: additional options for this query. + """ - provide event to query at a different time""" fields = ( ('build_target.id', 'id'), ('build_tag', 'build_tag'), @@ -3262,9 +3267,13 @@ def get_build_targets(info=None, event=None, buildTagID=None, destTagID=None, qu clauses.append(clause) values.update(c_values) if buildTagID is not None: + if isinstance(buildTagID, (str, dict)): + buildTagID = get_tag_id(buildTagID) clauses.append('build_tag = %(buildTagID)i') values['buildTagID'] = buildTagID if destTagID is not None: + if isinstance(destTagID, str) or isinstance(destTagID, dict): + destTagID = get_tag_id(destTagID) clauses.append('dest_tag = %(destTagID)i') values['destTagID'] = destTagID diff --git a/tests/test_hub/test_get_build_targets.py b/tests/test_hub/test_get_build_targets.py index 859f330..3b71b81 100644 --- a/tests/test_hub/test_get_build_targets.py +++ b/tests/test_hub/test_get_build_targets.py @@ -12,6 +12,7 @@ class TestGetBuildTargets(unittest.TestCase): def setUp(self): self.maxDiff = None self.name_or_id_clause = mock.patch('kojihub.name_or_id_clause').start() + self.get_tag_id = mock.patch('kojihub.get_tag_id').start() self.exports = kojihub.RootExports() self.context = mock.patch('kojihub.context').start() self.cursor = mock.MagicMock() @@ -19,8 +20,10 @@ class TestGetBuildTargets(unittest.TestCase): side_effect=self.getQuery).start() self.queries = [] self.build_target = 'build-target' - self.build_tag = 'tag' - self.dest_tag = 'dest-tag' + self.build_tag_name = 'tag' + self.dest_tag_name = 'dest-tag' + self.build_tag_id = 1 + self.dest_tag_id = 2 def tearDown(self): mock.patch.stopall() @@ -32,11 +35,28 @@ class TestGetBuildTargets(unittest.TestCase): self.queries.append(query) return query - def test_get_build_targets(self): + def test_get_build_targets_strings(self): self.name_or_id_clause.return_value = '(build_target.name = %(build_target_name)s)', \ {'build_target_name': 'build-target-url'} - kojihub.get_build_targets(self.build_target, buildTagID=self.build_tag, - destTagID=self.dest_tag) + self.get_tag_id.side_effect = [[self.build_tag_id], [self.dest_tag_id]] + kojihub.get_build_targets(self.build_target, buildTagID=self.build_tag_name, + destTagID=self.dest_tag_name) + self.assertEqual(len(self.queries), 1) + query = self.queries[0] + self.assertEqual(query.tables, ['build_target_config']) + self.assertEqual(query.joins, + ['build_target ON build_target_config.build_target_id = build_target.id', + 'tag AS tag1 ON build_target_config.build_tag = tag1.id', + 'tag AS tag2 ON build_target_config.dest_tag = tag2.id']) + self.assertEqual(query.clauses, + ['(active = TRUE)', '(build_target.name = %(build_target_name)s)', + 'build_tag = %(buildTagID)i', 'dest_tag = %(destTagID)i']) + + def test_get_build_targets_integers(self): + self.name_or_id_clause.return_value = '(build_target.name = %(build_target_name)s)', \ + {'build_target_name': 'build-target-url'} + kojihub.get_build_targets(self.build_target, buildTagID=self.build_tag_id, + destTagID=self.dest_tag_id) self.assertEqual(len(self.queries), 1) query = self.queries[0] self.assertEqual(query.tables, ['build_target_config'])