Skip to content

Commit 956ecad

Browse files
committed
ELI-138: Refactored audit function to reduce its Cognitive Complexity from 35 to the 15 allowed.
1 parent 68daff8 commit 956ecad

1 file changed

Lines changed: 46 additions & 26 deletions

File tree

src/eligibility_signposting_api/audit/audit_context.py

Lines changed: 46 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ def append_audit_condition(
6565
campaign_details: tuple[CampaignID | None, CampaignVersion | None],
6666
redirect_rule_details: tuple[RulePriority | None, RuleName | None],
6767
) -> None:
68-
audit_eligibility_cohorts, audit_eligibility_cohort_groups, audit_actions = [], [], []
68+
audit_eligibility_cohorts, audit_eligibility_cohort_groups = [], []
6969
audit_filter_rule, audit_suitability_rule, audit_redirect_rule = None, None, None
7070
best_active_iteration = best_results[0]
7171
best_candidate = best_results[1]
@@ -85,37 +85,15 @@ def append_audit_condition(
8585
)
8686

8787
if result.audit_rules and best_candidate:
88-
if best_candidate.status and best_candidate.status.name == Status.not_eligible.name:
89-
audit_filter_rule = AuditFilterRule(
90-
rule_priority=result.audit_rules[0].rule_priority,
91-
rule_name=result.audit_rules[0].rule_name,
92-
)
93-
if best_candidate.status and best_candidate.status.name == Status.not_actionable.name:
94-
audit_suitability_rule = AuditSuitabilityRule(
95-
rule_priority=result.audit_rules[0].rule_priority,
96-
rule_name=result.audit_rules[0].rule_name,
97-
rule_message=result.audit_rules[0].rule_description,
98-
)
88+
audit_filter_rule = AuditContext.create_audit_filter_rule(best_candidate, result)
89+
audit_suitability_rule = AuditContext.create_audit_suitability_rule(best_candidate, result)
9990

10091
if best_candidate and best_candidate.status and best_candidate.status.name == Status.actionable.name:
10192
audit_redirect_rule = AuditRedirectRule(
10293
rule_priority=str(redirect_rule_details[0]), rule_name=redirect_rule_details[1]
10394
)
10495

105-
if suggested_actions is None:
106-
audit_actions = None
107-
elif len(suggested_actions) > 0:
108-
for action in suggested_actions:
109-
audit_actions.append(
110-
AuditAction(
111-
internal_action_code=action.internal_action_code,
112-
action_code=action.action_code,
113-
action_type=action.action_type,
114-
action_description=action.action_description,
115-
action_url=str(action.url_link) if action.url_link else None,
116-
action_url_label=action.url_label,
117-
)
118-
)
96+
audit_actions = AuditContext.create_audit_actions(suggested_actions)
11997

12098
audit_condition = AuditCondition(
12199
campaign_id=campaign_details[0],
@@ -143,3 +121,45 @@ def add_response_details(response_id: UUID, last_updated: datetime) -> None:
143121
@staticmethod
144122
def write_to_firehose(service: AuditService) -> None:
145123
service.audit(g.audit_log.model_dump(by_alias=True))
124+
125+
@staticmethod
126+
def create_audit_actions(suggested_actions: list[SuggestedAction] | None) -> list[AuditAction] | None:
127+
audit_actions = []
128+
if suggested_actions is None:
129+
audit_actions = None
130+
elif len(suggested_actions) > 0:
131+
for action in suggested_actions:
132+
audit_actions.append(
133+
AuditAction(
134+
internal_action_code=action.internal_action_code,
135+
action_code=action.action_code,
136+
action_type=action.action_type,
137+
action_description=action.action_description,
138+
action_url=str(action.url_link) if action.url_link else None,
139+
action_url_label=action.url_label,
140+
)
141+
)
142+
return audit_actions
143+
144+
@staticmethod
145+
def create_audit_suitability_rule(
146+
best_candidate: IterationResult, result: CohortGroupResult
147+
) -> AuditSuitabilityRule | None:
148+
audit_suitability_rule = None
149+
if best_candidate.status and best_candidate.status.name == Status.not_actionable.name:
150+
audit_suitability_rule = AuditSuitabilityRule(
151+
rule_priority=result.audit_rules[0].rule_priority,
152+
rule_name=result.audit_rules[0].rule_name,
153+
rule_message=result.audit_rules[0].rule_description,
154+
)
155+
return audit_suitability_rule
156+
157+
@staticmethod
158+
def create_audit_filter_rule(best_candidate: IterationResult, result: CohortGroupResult) -> AuditFilterRule | None:
159+
audit_filter_rule = None
160+
if best_candidate.status and best_candidate.status.name == Status.not_eligible.name:
161+
audit_filter_rule = AuditFilterRule(
162+
rule_priority=result.audit_rules[0].rule_priority,
163+
rule_name=result.audit_rules[0].rule_name,
164+
)
165+
return audit_filter_rule

0 commit comments

Comments
 (0)