55from collections .abc import Collection , Iterable , Iterator , Mapping
66from dataclasses import dataclass , field
77from itertools import groupby
8- from typing import TYPE_CHECKING , Any
9-
10- from eligibility_signposting_api .audit .audit_context import AuditContext
11- from eligibility_signposting_api .services .processors .campaign_evaluator import CampaignEvaluator
12- from eligibility_signposting_api .services .processors .person_data_reader import PersonDataReader
13-
14- if TYPE_CHECKING :
15- from eligibility_signposting_api .model .rules import (
16- ActionsMapper ,
17- CampaignConfig ,
18- CampaignID ,
19- CampaignVersion ,
20- Iteration ,
21- IterationCohort ,
22- RuleName ,
23- RulePriority ,
24- RuleType ,
25- )
8+ from typing import Any
269
2710from wireup import service
2811
29- from eligibility_signposting_api .model import eligibility_status , rules
12+ from eligibility_signposting_api .audit .audit_context import AuditContext
13+ from eligibility_signposting_api .model import eligibility_status
14+ from eligibility_signposting_api .model .campaign_config import (
15+ ActionsMapper ,
16+ CampaignConfig ,
17+ CampaignID ,
18+ CampaignVersion ,
19+ Iteration ,
20+ IterationCohort ,
21+ IterationRule ,
22+ RuleName ,
23+ RulePriority ,
24+ RuleType ,
25+ )
3026from eligibility_signposting_api .model .eligibility_status import (
3127 ActionCode ,
3228 ActionDescription ,
4440from eligibility_signposting_api .services .calculators .rule_calculator import (
4541 RuleCalculator ,
4642)
43+ from eligibility_signposting_api .services .processors .campaign_evaluator import CampaignEvaluator
44+ from eligibility_signposting_api .services .processors .person_data_reader import PersonDataReader
4745
4846Row = Collection [Mapping [str , Any ]]
4947
5048
5149@service
5250class EligibilityCalculatorFactory :
5351 @staticmethod
54- def get (person_data : Row , campaign_configs : Collection [rules . CampaignConfig ]) -> EligibilityCalculator :
52+ def get (person_data : Row , campaign_configs : Collection [CampaignConfig ]) -> EligibilityCalculator :
5553 return EligibilityCalculator (person_data = person_data , campaign_configs = campaign_configs )
5654
5755
5856@dataclass
5957class EligibilityCalculator :
6058 person_data : Row
61- campaign_configs : Collection [rules . CampaignConfig ]
59+ campaign_configs : Collection [CampaignConfig ]
6260
6361 campaign_evaluator : CampaignEvaluator = field (default_factory = CampaignEvaluator )
6462 person_data_reader : PersonDataReader = field (default_factory = PersonDataReader )
@@ -89,9 +87,7 @@ def get_the_best_cohort_memberships(
8987 return best_status , best_cohorts
9088
9189 @staticmethod
92- def get_exclusion_rules (
93- cohort : IterationCohort , filter_rules : Iterable [rules .IterationRule ]
94- ) -> Iterator [rules .IterationRule ]:
90+ def get_exclusion_rules (cohort : IterationCohort , filter_rules : Iterable [IterationRule ]) -> Iterator [IterationRule ]:
9591 return (
9692 ir
9793 for ir in filter_rules
@@ -103,23 +99,23 @@ def get_exclusion_rules(
10399 @staticmethod
104100 def get_rules_by_type (
105101 active_iteration : Iteration ,
106- ) -> tuple [tuple [rules . IterationRule , ...], tuple [rules . IterationRule , ...]]:
102+ ) -> tuple [tuple [IterationRule , ...], tuple [IterationRule , ...]]:
107103 filter_rules , suppression_rules = (
108104 tuple (rule for rule in active_iteration .iteration_rules if attrgetter ("type" )(rule ) == rule_type )
109- for rule_type in (rules . RuleType .filter , rules . RuleType .suppression )
105+ for rule_type in (RuleType .filter , RuleType .suppression )
110106 )
111107 return filter_rules , suppression_rules
112108
113109 @staticmethod
114110 def get_action_rules_components (
115111 active_iteration : Iteration , rule_type : RuleType
116- ) -> tuple [tuple [rules . IterationRule , ...], ActionsMapper , str | None ]:
112+ ) -> tuple [tuple [IterationRule , ...], ActionsMapper , str | None ]:
117113 action_rules = tuple (rule for rule in active_iteration .iteration_rules if rule .type in rule_type )
118114
119115 routing_map = {
120- rules . RuleType .redirect : active_iteration .default_comms_routing ,
121- rules . RuleType .not_eligible_actions : active_iteration .default_not_eligible_routing ,
122- rules . RuleType .not_actionable_actions : active_iteration .default_not_actionable_routing ,
116+ RuleType .redirect : active_iteration .default_comms_routing ,
117+ RuleType .not_eligible_actions : active_iteration .default_not_eligible_routing ,
118+ RuleType .not_actionable_actions : active_iteration .default_not_actionable_routing ,
123119 }
124120
125121 default_comms = routing_map .get (rule_type )
@@ -168,9 +164,9 @@ def evaluate_eligibility(
168164 condition_results [condition_name ] = best_candidate
169165
170166 status_to_rule_type = {
171- Status .actionable : rules . RuleType .redirect ,
172- Status .not_eligible : rules . RuleType .not_eligible_actions ,
173- Status .not_actionable : rules . RuleType .not_actionable_actions ,
167+ Status .actionable : RuleType .redirect ,
168+ Status .not_eligible : RuleType .not_eligible_actions ,
169+ Status .not_actionable : RuleType .not_actionable_actions ,
174170 }
175171
176172 if best_candidate .status in status_to_rule_type and best_active_iteration is not None :
@@ -257,7 +253,7 @@ def handle_action_rules(
257253
258254 return actions , matched_action_rule_priority , matched_action_rule_name
259255
260- def get_cohort_results (self , active_iteration : rules . Iteration ) -> dict [str , CohortGroupResult ]:
256+ def get_cohort_results (self , active_iteration : Iteration ) -> dict [str , CohortGroupResult ]:
261257 cohort_results : dict [str , CohortGroupResult ] = {}
262258 filter_rules , suppression_rules = self .get_rules_by_type (active_iteration )
263259 for cohort in sorted (active_iteration .iteration_cohorts , key = attrgetter ("priority" )):
@@ -322,7 +318,7 @@ def is_eligible_by_filter_rules(
322318 self ,
323319 cohort : IterationCohort ,
324320 cohort_results : dict [str , CohortGroupResult ],
325- filter_rules : Iterable [rules . IterationRule ],
321+ filter_rules : Iterable [IterationRule ],
326322 ) -> bool :
327323 is_eligible = True
328324 priority_getter = attrgetter ("priority" )
@@ -347,7 +343,7 @@ def evaluate_suppression_rules(
347343 self ,
348344 cohort : IterationCohort ,
349345 cohort_results : dict [str , CohortGroupResult ],
350- suppression_rules : Iterable [rules . IterationRule ],
346+ suppression_rules : Iterable [IterationRule ],
351347 ) -> None :
352348 is_actionable : bool = True
353349 priority_getter = attrgetter ("priority" )
@@ -379,7 +375,7 @@ def evaluate_suppression_rules(
379375 )
380376
381377 def evaluate_rules_priority_group (
382- self , rules_group : Iterator [rules . IterationRule ]
378+ self , rules_group : Iterator [IterationRule ]
383379 ) -> tuple [eligibility_status .Status , list [eligibility_status .Reason ], bool ]:
384380 is_rule_stop = False
385381 exclusion_reasons = []
0 commit comments