From 893dc0310c41232edf804f88bd2f3590a294af79 Mon Sep 17 00:00:00 2001 From: Lukas Holecek Date: May 23 2018 06:39:30 +0000 Subject: Fix checking policies for specific item Results and waivers that Policy.check() takes as arguments should all be related to given item. This was broken in 6e23596 by passing results and waivers for all items. --- diff --git a/greenwave/api_v1.py b/greenwave/api_v1.py index a68f9c6..69fa222 100644 --- a/greenwave/api_v1.py +++ b/greenwave/api_v1.py @@ -253,17 +253,18 @@ def make_decision(): waivers = [w for w in waivers if w['id'] not in ignore_waivers] results = [] - for item in subjects: - results.extend(retrieve_results(item)) - results = [r for r in results if r['id'] not in ignore_results] - answers = [] for item in subjects: - relevant_policies = [ - policy for policy in applicable_policies - if policy.is_relevant_to(item)] - for policy in relevant_policies: - answers.extend(policy.check(item, results, waivers)) + item_results = retrieve_results(item) + item_results = [r for r in item_results if r['id'] not in ignore_results] + results.extend(item_results) + + subject_subset = set(item.items()) + item_waivers = [w for w in waivers if subject_subset <= set(w['subject'].items())] + + for policy in applicable_policies: + if policy.is_relevant_to(item): + answers.extend(policy.check(item, item_results, item_waivers)) res = { 'policies_satisfied': all(answer.is_satisfied for answer in answers),