From 5d3f39cfe41f4e5478dfa5392b59316a642c8a15 Mon Sep 17 00:00:00 2001 From: Mike McLean Date: Nov 17 2018 02:07:42 +0000 Subject: PR#1081: hub: [getPackageID] add strict behavior Merges #1081 https://pagure.io/koji/pull-request/1081 Fixes: #1076 https://pagure.io/koji/issue/1076 getPackageID API call should raise GenericError exception for non existing package name --- diff --git a/hub/kojihub.py b/hub/kojihub.py index b407103..789f6b3 100644 --- a/hub/kojihub.py +++ b/hub/kojihub.py @@ -10221,14 +10221,20 @@ class RootExports(object): getTagID = staticmethod(get_tag_id) getTag = staticmethod(get_tag) - def getPackageID(self, name): - c = context.cnx.cursor() - q = """SELECT id FROM package WHERE name=%(name)s""" - c.execute(q, locals()) - r = c.fetchone() + def getPackageID(self, name, strict=False): + """Get package ID by name. + If package doesn't exist, return None, unless strict is True in which + case an exception is raised.""" + query = QueryProcessor(tables=['package'], + columns=['id'], + clauses=['name=%(name)s'], + values=locals()) + r = query.executeOne() if not r: + if strict: + raise koji.GenericError('Invalid package name: %s' % name) return None - return r[0] + return r['id'] getPackage = staticmethod(lookup_package) diff --git a/tests/test_hub/test_getPackageID.py b/tests/test_hub/test_getPackageID.py new file mode 100644 index 0000000..8172bbc --- /dev/null +++ b/tests/test_hub/test_getPackageID.py @@ -0,0 +1,47 @@ +from __future__ import absolute_import + +import mock + +from .utils import DBQueryTestCase + +import koji +import kojihub + + +class TestGetPackageID(DBQueryTestCase): + maxDiff = None + + def test_getPackageID(self): + self.qp_execute_return_value = [{'id': 1}] + rv = kojihub.RootExports().getPackageID('koji') + self.assertEqual(len(self.queries), 1) + self.assertLastQueryEqual(tables=['package'], + columns=['id'], + clauses=['name=%(name)s'], + values={'name': 'koji', + 'strict': False, + 'self': mock.ANY}) + self.assertEqual(rv, 1) + + def test_getPackageID_strict(self): + with self.assertRaises(koji.GenericError) as cm: + kojihub.RootExports().getPackageID('invalidpkg', strict=True) + self.assertLastQueryEqual(tables=['package'], + columns=['id'], + clauses=['name=%(name)s'], + values={'name': 'invalidpkg', + 'strict': True, + 'self': mock.ANY}) + self.assertEqual(cm.exception.args[0], + 'Invalid package name: invalidpkg') + + def test_getPackageID_None(self): + rv = kojihub.RootExports().getPackageID('invalidpkg') + self.assertEqual(len(self.queries), 1) + self.assertLastQueryEqual(tables=['package'], + columns=['id'], + clauses=['name=%(name)s'], + values={'name': 'invalidpkg', + 'strict': False, + 'self': mock.ANY}) + self.assertIsNone(rv)