From 78dd4aaf08727aed194d496703f0f45171438f13 Mon Sep 17 00:00:00 2001 From: "Owen W. Taylor" Date: Tue, 12 Jun 2018 11:52:43 -0400 Subject: [PATCH] Make Release.from_tags() more predictable If Release.from_tags() was called with a tag not associated with any release, it would raise KeyError (unless an earlier tag in the list was found first.) This was unexpected from the documentation - and was handled by one caller but not others. Change it to return None in this case - this was handled by all callers. Signed-off-by: Owen W. Taylor --- bodhi/server/models.py | 2 ++ bodhi/server/validators.py | 9 +-------- bodhi/tests/server/services/test_updates.py | 2 -- 3 files changed, 3 insertions(+), 10 deletions(-) diff --git a/bodhi/server/models.py b/bodhi/server/models.py index 7e56964b54..7ba0429d84 100644 --- a/bodhi/server/models.py +++ b/bodhi/server/models.py @@ -947,6 +947,8 @@ def from_tags(cls, tags, session): """ tag_types, tag_rels = cls.get_tags(session) for tag in tags: + if tag not in tag_rels: + continue release = session.query(cls).filter_by(name=tag_rels[tag]).first() if release: return release diff --git a/bodhi/server/validators.py b/bodhi/server/validators.py index b8cc3f70eb..8cbdb8f5ee 100644 --- a/bodhi/server/validators.py +++ b/bodhi/server/validators.py @@ -155,14 +155,7 @@ def cache_release(request, build): tags = cache_tags(request, build) if tags is None: return None - build_rel = None - try: - build_rel = Release.from_tags(tags, request.db) - except KeyError: - log.warn('Unable to determine release from ' - 'tags: %r build: %r' % (tags, build)) - request.errors.add('body', 'builds', - 'Unable to determine release from build: %s' % build) + build_rel = Release.from_tags(tags, request.db) if not build_rel: msg = 'Cannot find release associated with ' + \ 'build: {}, tags: {}'.format(build, tags) diff --git a/bodhi/tests/server/services/test_updates.py b/bodhi/tests/server/services/test_updates.py index 12b8a2a9ba..5c55302259 100644 --- a/bodhi/tests/server/services/test_updates.py +++ b/bodhi/tests/server/services/test_updates.py @@ -872,8 +872,6 @@ def test_edit_add_build_from_different_release(self): expected_json = { u'status': u'error', u'errors': [ - {u'description': u'Unable to determine release from build: bodhi-3.2.0-1.fc27', - u'location': u'body', u'name': u'builds'}, {u'description': ( u"Cannot find release associated with build: bodhi-3.2.0-1.fc27, " u"tags: [u'f27-updates-candidate', u'f27', u'f27-updates-testing']"),