Skip to content

Commit fe0d78b

Browse files
Add support for custom scorecards (#22)
1 parent 52b20ad commit fe0d78b

File tree

2 files changed

+43
-24
lines changed

2 files changed

+43
-24
lines changed

core/jira_handler.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,11 @@ def ticket_handler(self):
2020
entity_scorecard = entity.get("scorecards", {}).get(
2121
self.scorecard.get("identifier"), {}
2222
)
23-
rules_by_level = {"Gold": [], "Silver": [], "Bronze": []}
23+
rules_by_level = {}
2424

2525
# Grouping rules by levels
2626
for rule in entity_scorecard.get("rules", []):
27-
rules_by_level[rule.get("level")].append(rule)
27+
rules_by_level.setdefault(rule.get("level"), []).append(rule)
2828

2929
for level in rules_by_level:
3030
scorecard_level_completed = all(

generators/slack.py

+41-22
Original file line numberDiff line numberDiff line change
@@ -13,27 +13,30 @@ class SlackMessageGenerator(generators.base.BaseMessageGenerator):
1313

1414
def scorecard_report(self, blueprint: str, scorecard: Dict[str, Any], entities: list):
1515
blueprint_plural = utils.convert_to_plural(blueprint).title()
16-
entities_by_level = {
17-
"Gold": [],
18-
"Silver": [],
19-
"Bronze": [],
20-
"Basic": [],
21-
}
16+
most_advanced_level: str = self._get_most_advanced_scorecard_level(
17+
scorecard
18+
)
19+
entities_by_level = {}
2220
overall_entities_per_team = {}
23-
gold_entities_per_team = {}
21+
most_advanced_entities_per_team = {}
2422
number_of_passed_entities_per_rule = {}
2523
for entity in entities:
26-
entity_scorecard_result = entity.get("scorecards", {}).get(scorecard.get("identifier"), {})
27-
entities_by_level[entity_scorecard_result.get("level")].append(
24+
entity_scorecard_result = entity.get(
25+
"scorecards", {}
26+
).get(scorecard.get("identifier"), {})
27+
entities_by_level.setdefault(
28+
entity_scorecard_result.get("level"),
29+
[]
30+
).append(
2831
{
2932
"identifier": entity.get("identifier"),
3033
"name": entity.get("title"),
3134
}
3235
)
3336
for team in entity.get("team", []):
3437
overall_entities_per_team[team] = overall_entities_per_team.get(team, 0) + 1
35-
if entity_scorecard_result.get("level") == "Gold":
36-
gold_entities_per_team[team] = gold_entities_per_team.get(team, 0) + 1
38+
if entity_scorecard_result.get("level") == most_advanced_level:
39+
most_advanced_entities_per_team[team] = most_advanced_entities_per_team.get(team, 0) + 1
3740

3841
for rule in entity_scorecard_result.get("rules", []):
3942
number_of_passed_entities_per_rule[rule.get("identifier")] = \
@@ -181,24 +184,29 @@ def scorecard_report(self, blueprint: str, scorecard: Dict[str, Any], entities:
181184
]
182185
return blocks
183186

184-
def scorecard_reminder(self,
185-
blueprint: str,
186-
scorecard: Dict[str, Any],
187-
entities: list) -> List[Dict[str, Any]]:
187+
def scorecard_reminder(
188+
self,
189+
blueprint: str,
190+
scorecard: Dict[str, Any],
191+
entities: list
192+
) -> List[Dict[str, Any]]:
188193
blueprint_plural = utils.convert_to_plural(blueprint).title()
189-
entities_didnt_pass_all_rules = {
190-
"Silver": [],
191-
"Bronze": [],
192-
"Basic": [],
193-
}
194+
most_advanced_level: str = self._get_most_advanced_scorecard_level(
195+
scorecard
196+
)
197+
198+
entities_didnt_pass_all_rules = {}
194199
number_of_entities_didnt_pass_all_rules = 0
195200
for entity in entities:
196201
entity_scorecard_result = entity.get("scorecards", {}).get(scorecard.get("identifier"), {})
197202
number_of_rules = len(entity_scorecard_result.get("rules", []))
198-
if entity_scorecard_result.get("level") != "Gold":
203+
if entity_scorecard_result.get("level") != most_advanced_level:
199204
passed_rules = [rule for rule in entity_scorecard_result.get("rules", []) if rule.get("status") == "SUCCESS"] or []
200205
if len(passed_rules) < number_of_rules:
201-
entities_didnt_pass_all_rules[entity_scorecard_result.get("level")].append(
206+
entities_didnt_pass_all_rules.setdefault(
207+
entity_scorecard_result.get("level"),
208+
[]
209+
).append(
202210
{
203211
"identifier": entity.get("identifier"),
204212
"name": entity.get("title"),
@@ -242,6 +250,17 @@ def scorecard_reminder(self,
242250
)
243251
]
244252
return blocks
253+
254+
@staticmethod
255+
def _get_most_advanced_scorecard_level(scorecard: dict[str, Any]) -> str | None:
256+
"""
257+
Get the most advanced level of a scorecard
258+
"""
259+
260+
scorecard_levels = scorecard.get("levels")
261+
262+
most_advanced_level: str = scorecard_levels[-1].get("title")
263+
return most_advanced_level
245264

246265
@staticmethod
247266
def _resolve_top_highest_lowest_scored_rules(entities: list,

0 commit comments

Comments
 (0)