@@ -106,11 +106,15 @@ def evaluate_eligibility_by_iteration_rules(
106106 exclusion_reasons , actionable_reasons = [], []
107107 by_priority = sorted (iteration .iteration_rules , key = priority_getter )
108108 for _ , rule_group in groupby (by_priority , key = priority_getter ):
109- status , group_actionable , group_exclusions = self .evaluate_priority_group (rule_group , worst_status )
109+ status , group_actionable , group_exclusions , is_rule_stop = self .evaluate_priority_group (
110+ rule_group , worst_status
111+ )
110112 # Merge results
111113 worst_status = status
112114 actionable_reasons .extend (group_actionable )
113115 exclusion_reasons .extend (group_exclusions )
116+ if is_rule_stop :
117+ break
114118 condition_status_entry = status_with_reasons .setdefault (worst_status , [])
115119 condition_status_entry .extend (
116120 actionable_reasons if worst_status is eligibility .Status .actionable else exclusion_reasons
@@ -124,9 +128,9 @@ def evaluate_priority_group(
124128 self ,
125129 iteration_rule_group : Iterator [rules .IterationRule ],
126130 worst_status_so_far_for_condition : eligibility .Status ,
127- ) -> tuple [eligibility .Status , list [eligibility .Reason ], list [eligibility .Reason ]]:
131+ ) -> tuple [eligibility .Status , list [eligibility .Reason ], list [eligibility .Reason ], bool ]:
132+ is_rule_stop = False
128133 exclusion_reasons , actionable_reasons = [], []
129-
130134 exclude_capable_rules = [
131135 ir
132136 for ir in iteration_rule_group
@@ -147,4 +151,6 @@ def evaluate_priority_group(
147151 actionable_reasons .append (reason )
148152
149153 worst_group_status = eligibility .Status .worst (best_status , worst_status_so_far_for_condition )
150- return worst_group_status , actionable_reasons , exclusion_reasons
154+ if worst_group_status .is_exclusion :
155+ is_rule_stop = any (rule .rule_stop for rule in exclude_capable_rules )
156+ return worst_group_status , actionable_reasons , exclusion_reasons , is_rule_stop
0 commit comments