1919 IterationCohort ,
2020 RuleName ,
2121 RulePriority ,
22+ RuleType ,
2223 )
2324
2425from wireup import service
@@ -140,23 +141,28 @@ def get_rules_by_type(
140141 return filter_rules , suppression_rules
141142
142143 @staticmethod
143- def get_redirect_rules (
144- active_iteration : Iteration ,
145- ) -> tuple [tuple [rules .IterationRule , ...], ActionsMapper , str ]:
146- redirect_rules = tuple (
147- rule for rule in active_iteration .iteration_rules if rule .type in rules .RuleType .redirect
148- )
149- default_comms = active_iteration .default_comms_routing
144+ def get_action_rules_components (
145+ active_iteration : Iteration , rule_type : RuleType
146+ ) -> tuple [tuple [rules .IterationRule , ...], ActionsMapper , str | None ]:
147+ action_rules = tuple (rule for rule in active_iteration .iteration_rules if rule .type in rule_type )
148+
149+ routing_map = {
150+ rules .RuleType .redirect : active_iteration .default_comms_routing ,
151+ rules .RuleType .not_eligible_actions : active_iteration .default_not_eligible_routing ,
152+ rules .RuleType .not_actionable_actions : active_iteration .default_not_actionable_routing ,
153+ }
154+
155+ default_comms = routing_map .get (rule_type )
150156 action_mapper = active_iteration .actions_mapper
151- return redirect_rules , action_mapper , default_comms
157+ return action_rules , action_mapper , default_comms
152158
153159 def evaluate_eligibility (
154160 self , include_actions : str , conditions : list [str ], category : str
155161 ) -> eligibility .EligibilityStatus :
156162 include_actions_flag = include_actions .upper () == "Y"
157163 condition_results : dict [ConditionName , IterationResult ] = {}
158164 actions : list [SuggestedAction ] | None = []
159- redirect_rule_priority , redirect_rule_name = None , None
165+ action_rule_priority , action_rule_name = None , None
160166
161167 for condition_name , campaign_group in self .campaigns_grouped_by_condition_name (conditions , category ):
162168 best_active_iteration : Iteration | None
@@ -188,16 +194,26 @@ def evaluate_eligibility(
188194
189195 condition_results [condition_name ] = best_candidate
190196
191- if best_candidate .status == Status .actionable and best_active_iteration is not None :
197+ status_to_rule_type = {
198+ Status .actionable : rules .RuleType .redirect ,
199+ Status .not_eligible : rules .RuleType .not_eligible_actions ,
200+ Status .not_actionable : rules .RuleType .not_actionable_actions ,
201+ }
202+
203+ if best_candidate .status in status_to_rule_type and best_active_iteration is not None :
192204 if include_actions_flag :
193- actions , matched_r_rule_priority , matched_r_rule_name = self .handle_redirect_rules (
194- best_active_iteration
205+ rule_type = status_to_rule_type [best_candidate .status ]
206+ actions , matched_action_rule_priority , matched_action_rule_name = self .handle_action_rules (
207+ best_active_iteration , rule_type
195208 )
196- redirect_rule_name = matched_r_rule_name
197- redirect_rule_priority = matched_r_rule_priority
209+ action_rule_name = matched_action_rule_name
210+ action_rule_priority = matched_action_rule_priority
198211 else :
199212 actions = None
200213
214+ else :
215+ actions = None
216+
201217 if best_candidate .status in (Status .not_eligible , Status .not_actionable ) and not include_actions_flag :
202218 actions = None
203219
@@ -212,7 +228,7 @@ def evaluate_eligibility(
212228 condition_name ,
213229 (best_active_iteration , best_candidate , best_cohort_results ),
214230 (best_campaign_id , best_campaign_version ),
215- (redirect_rule_priority , redirect_rule_name ),
231+ (action_rule_priority , action_rule_name ),
216232 )
217233
218234 # Consolidate all the results and return
@@ -240,15 +256,16 @@ def get_iteration_results(
240256 )
241257 return iteration_results
242258
243- def handle_redirect_rules (
244- self , best_active_iteration : Iteration
259+ def handle_action_rules (
260+ self , best_active_iteration : Iteration , rule_type : RuleType
245261 ) -> tuple [list [SuggestedAction ] | None , RulePriority | None , RuleName | None ]:
246- redirect_rules , action_mapper , default_comms = self .get_redirect_rules (best_active_iteration )
262+ action_rules , action_mapper , default_comms = self .get_action_rules_components (best_active_iteration , rule_type )
247263 priority_getter = attrgetter ("priority" )
248- sorted_rules_by_priority = sorted (redirect_rules , key = priority_getter )
264+ sorted_rules_by_priority = sorted (action_rules , key = priority_getter )
265+
266+ actions : list [SuggestedAction ] | None = self .get_actions_from_comms (action_mapper , default_comms ) # pyright: ignore[reportArgumentType]
249267
250- actions : list [SuggestedAction ] | None = self .get_actions_from_comms (action_mapper , default_comms )
251- matched_redirect_rule_priority , matched_redirect_rule_name = None , None
268+ matched_action_rule_priority , matched_action_rule_name = None , None
252269 for _ , rule_group in groupby (sorted_rules_by_priority , key = priority_getter ):
253270 rule_group_list = list (rule_group )
254271 matcher_matched_list = [
@@ -261,11 +278,11 @@ def handle_redirect_rules(
261278 rule_actions = self .get_actions_from_comms (action_mapper , comms_routing )
262279 if rule_actions and len (rule_actions ) > 0 :
263280 actions = rule_actions
264- matched_redirect_rule_priority = rule_group_list [0 ].priority
265- matched_redirect_rule_name = rule_group_list [0 ].name
281+ matched_action_rule_priority = rule_group_list [0 ].priority
282+ matched_action_rule_name = rule_group_list [0 ].name
266283 break
267284
268- return actions , matched_redirect_rule_priority , matched_redirect_rule_name
285+ return actions , matched_action_rule_priority , matched_action_rule_name
269286
270287 def get_cohort_results (self , active_iteration : rules .Iteration ) -> dict [str , CohortGroupResult ]:
271288 cohort_results : dict [str , CohortGroupResult ] = {}
0 commit comments