Skip to content

Commit 81a63af

Browse files
committed
fix(score-breakdown): prevent infinite looping and make defaulting logic consistent
1 parent 62de7ba commit 81a63af

2 files changed

Lines changed: 39 additions & 23 deletions

File tree

testgen/ui/views/score_details.py

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -66,25 +66,26 @@ def render(
6666
],
6767
)
6868

69-
if category not in typing.get_args(Categories):
70-
category = None
71-
72-
if not category and score_definition.category:
73-
category = score_definition.category.value
69+
if not category or category not in typing.get_args(Categories):
70+
category = (
71+
score_definition.category.value
72+
if score_definition.category
73+
else ScoreCategory.dq_dimension.value
74+
)
7475

75-
if not category:
76-
category = ScoreCategory.dq_dimension.value
76+
if not score_type or score_type not in typing.get_args(ScoreTypes):
77+
score_type = (
78+
"cde_score"
79+
if score_definition.cde_score and not score_definition.total_score
80+
else "score"
81+
)
7782

7883
score_card = None
7984
score_breakdown = None
8085
issues = None
8186
with st.spinner(text="Loading data :gray[:small[(This might take a few minutes)]] ..."):
8287
user_can_edit = session.auth.user_has_permission("edit")
8388
score_card = format_score_card(score_definition.as_cached_score_card(include_definition=True))
84-
if score_type not in typing.get_args(ScoreTypes):
85-
score_type = None
86-
if not score_type:
87-
score_type = "cde_score" if score_card["cde_score"] and not score_card["score"] else "score"
8889
if not drilldown:
8990
score_breakdown = ScoreDefinitionBreakdownItem.filter(
9091
definition_id=definition_id,

testgen/ui/views/score_explorer.py

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import json
2+
import typing
23
from datetime import datetime
34
from functools import partial
45
from io import BytesIO
@@ -13,7 +14,14 @@
1314
)
1415
from testgen.common.mixpanel_service import MixpanelService
1516
from testgen.common.models.profiling_run import ProfilingRun
16-
from testgen.common.models.scores import ScoreCategory, ScoreDefinition, ScoreDefinitionCriteria, SelectedIssue
17+
from testgen.common.models.scores import (
18+
Categories,
19+
ScoreCategory,
20+
ScoreDefinition,
21+
ScoreDefinitionCriteria,
22+
ScoreTypes,
23+
SelectedIssue,
24+
)
1725
from testgen.common.models.test_run import TestRun
1826
from testgen.ui.components import widgets as testgen
1927
from testgen.ui.components.widgets.download_dialog import FILE_DATA_TYPE, download_dialog, zip_multi_file_data
@@ -46,7 +54,7 @@ def render(
4654
category: str | None = None,
4755
filters: str | None = None,
4856
breakdown_category: str | None = None,
49-
breakdown_score_type: str | None = "score",
57+
breakdown_score_type: str | None = None,
5058
drilldown: str | None = None,
5159
definition_id: str | None = None,
5260
project_code: str | None = None,
@@ -65,20 +73,15 @@ def render(
6573
)
6674
return
6775

68-
if not breakdown_category and original_score_definition.category:
69-
breakdown_category = original_score_definition.category.value
70-
7176
project_code = original_score_definition.project_code
7277
page_title = "Edit Scorecard"
7378
last_breadcrumb = original_score_definition.name
79+
7480
testgen.page_header(page_title, breadcrumbs=[
7581
{"path": "quality-dashboard", "label": "Quality Dashboard", "params": {"project_code": project_code}},
7682
{"label": last_breadcrumb},
7783
])
7884

79-
if not breakdown_category:
80-
breakdown_category = ScoreCategory.dq_dimension.value
81-
8285
score_breakdown = None
8386
issues = None
8487
filter_values = {}
@@ -117,9 +120,21 @@ def render(
117120
group_by_field=filter_by_columns != "true",
118121
)
119122

120-
score_card = None
121-
if score_definition:
122-
score_card = score_definition.as_score_card()
123+
score_card = score_definition.as_score_card()
124+
125+
if not breakdown_category or breakdown_category not in typing.get_args(Categories):
126+
breakdown_category = (
127+
score_definition.category.value
128+
if score_definition.category
129+
else ScoreCategory.dq_dimension.value
130+
)
131+
132+
if not breakdown_score_type or breakdown_score_type not in typing.get_args(ScoreTypes):
133+
breakdown_score_type = (
134+
"cde_score"
135+
if score_definition.cde_score and not score_definition.total_score
136+
else "score"
137+
)
123138

124139
if score_definition.criteria.has_filters() and not drilldown:
125140
score_breakdown = format_score_card_breakdown(
@@ -129,7 +144,7 @@ def render(
129144
),
130145
breakdown_category,
131146
)
132-
if score_card and drilldown:
147+
if drilldown:
133148
issues = format_score_card_issues(
134149
score_definition.get_score_card_issues(breakdown_score_type, breakdown_category, drilldown),
135150
breakdown_category,

0 commit comments

Comments
 (0)