From 5ddffd6887ef95e72a3e553ed794a6e69a45ffe2 Mon Sep 17 00:00:00 2001 From: Lukas Holecek Date: Jun 11 2018 13:06:02 +0000 Subject: Get multiple waivers with single request --- diff --git a/greenwave/api_v1.py b/greenwave/api_v1.py index f5b1ad4..1c6957a 100644 --- a/greenwave/api_v1.py +++ b/greenwave/api_v1.py @@ -328,20 +328,28 @@ def make_decision(): answers = [] results = retrieve_results(subject_type, subject_identifier) results = [r for r in results if r['id'] not in ignore_results] - waivers = retrieve_waivers(product_version, subject_type, subject_identifier) + waivers = retrieve_waivers(product_version, subject_type, [subject_identifier]) waivers = [w for w in waivers if w['id'] not in ignore_waivers] + for policy in subject_policies: answers.extend(policy.check(subject_identifier, results, waivers)) + if build_policies: build_nvrs = retrieve_builds_in_update(subject_identifier) + + nvrs_waivers = retrieve_waivers(product_version, 'koji_build', build_nvrs) + nvrs_waivers = [w for w in nvrs_waivers if w['id'] not in ignore_waivers] + waivers.extend(nvrs_waivers) + for nvr in build_nvrs: nvr_results = retrieve_results('koji_build', nvr) nvr_results = [r for r in nvr_results if r['id'] not in ignore_results] results.extend(nvr_results) - nvr_waivers = retrieve_waivers(product_version, 'koji_build', nvr) - nvr_waivers = [w for w in nvr_waivers if w['id'] not in ignore_waivers] - waivers.extend(nvr_waivers) + nvr_waivers = [ + item for item in nvrs_waivers + if nvr == item.get('subject_identifier') + ] for policy in build_policies: answers.extend(policy.check(nvr, nvr_results, nvr_waivers)) diff --git a/greenwave/resources.py b/greenwave/resources.py index d8b8a8d..655574f 100644 --- a/greenwave/resources.py +++ b/greenwave/resources.py @@ -154,14 +154,14 @@ def retrieve_results(subject_type, subject_identifier): # NOTE - not cached, for now. @greenwave.utils.retry(wait_on=urllib3.exceptions.NewConnectionError) -def retrieve_waivers(product_version, subject_type, subject_identifier): +def retrieve_waivers(product_version, subject_type, subject_identifiers): timeout = current_app.config['REQUESTS_TIMEOUT'] verify = current_app.config['REQUESTS_VERIFY'] filters = [{ 'product_version': product_version, 'subject_type': subject_type, 'subject_identifier': subject_identifier, - }] + } for subject_identifier in subject_identifiers] response = requests_session.post( current_app.config['WAIVERDB_API_URL'] + '/waivers/+filtered', headers={'Content-Type': 'application/json'},