Skip to content

Commit 685c715

Browse files
author
ci bot
committed
Merge branch 'aarthy/score-error' into 'enterprise'
fix(score-breakdown): prevent infinite looping and make defaulting logic consistent See merge request dkinternal/testgen/dataops-testgen!352
2 parents e72335a + 81a63af commit 685c715

10 files changed

Lines changed: 56 additions & 38 deletions

File tree

testgen/ui/components/frontend/js/components/score_breakdown.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ const ScoreBreakdown = (score, breakdown, category, scoreType, onViewDetails) =>
4242
return Select({
4343
label: '',
4444
value: selectedScoreType,
45-
options: scoreTypeOptions.map((s) => ({ label: SCORE_TYPE_LABEL[s], value: s, selected: s === scoreType })),
45+
options: scoreTypeOptions.map((s) => ({ label: SCORE_TYPE_LABEL[s], value: s })),
4646
height: 32,
4747
onChange: (value) => emitEvent('ScoreTypeChanged', { payload: value }),
4848
testId: 'score-type-selector',

testgen/ui/components/frontend/js/components/select.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
* @type {object}
44
* @property {string} label
55
* @property {string} value
6-
* @property {boolean?} selected
76
* @property {string?} icon
87
*
98
* @typedef Properties

testgen/ui/components/frontend/js/pages/data_catalog.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/**
22
* @import { Column, Table } from '../data_profiling/data_profiling_utils.js';
33
* @import { TreeNode, SelectedNode } from '../components/tree.js';
4-
* @import { ProjectSummary } from '../types.js';
4+
* @import { FilterOption, ProjectSummary } from '../types.js';
55
*
66
* @typedef ColumnPath
77
* @type {object}
@@ -42,6 +42,7 @@
4242
* @typedef Properties
4343
* @type {object}
4444
* @property {ProjectSummary} project_summary
45+
* @property {FilterOption[]} table_group_filter_options
4546
* @property {ColumnPath[]} columns
4647
* @property {Table | Column} selected_item
4748
* @property {Object.<string, string[]>} tag_values

testgen/ui/components/frontend/js/pages/profiling_runs.js

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
/**
2-
* @import { ProjectSummary } from '../types.js';
3-
* @import { SelectOption } from '../components/select.js';
4-
*
2+
* @import { FilterOption, ProjectSummary } from '../types.js'; *
53
*
64
* @typedef ProgressStep
75
* @type {object}
@@ -40,7 +38,7 @@
4038
* @type {object}
4139
* @property {ProjectSummary} project_summary
4240
* @property {ProfilingRun[]} profiling_runs
43-
* @property {SelectOption[]} table_group_options
41+
* @property {FilterOption[]} table_group_options
4442
* @property {Permissions} permissions
4543
*/
4644
import van from '../van.min.js';

testgen/ui/components/frontend/js/pages/project_dashboard.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/**
2-
* @import { ProjectSummary } from '../types.js';
2+
* @import { FilterOption, ProjectSummary } from '../types.js';
33
* @import { TestSuiteSummary } from '../types.js';
44
*
55
* @typedef TableGroupSummary

testgen/ui/components/frontend/js/pages/test_runs.js

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
/**
2-
* @import { ProjectSummary } from '../types.js';
3-
* @import { SelectOption } from '../components/select.js';
2+
* @import { FilterOption, ProjectSummary } from '../types.js';
43
*
54
* @typedef ProgressStep
65
* @type {object}
@@ -37,8 +36,8 @@
3736
* @type {object}
3837
* @property {ProjectSummary} project_summary
3938
* @property {TestRun[]} test_runs
40-
* @property {SelectOption[]} table_group_options
41-
* @property {SelectOption[]} test_suite_options
39+
* @property {FilterOption[]} table_group_options
40+
* @property {FilterOption[]} test_suite_options
4241
* @property {Permissions} permissions
4342
*/
4443
import van from '../van.min.js';

testgen/ui/components/frontend/js/pages/test_suites.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
/**
2-
* @import { ProjectSummary } from '../types.js';
2+
* @import { FilterOption, ProjectSummary } from '../types.js';
33
* @import { TestSuiteSummary } from '../types.js';
4-
* @import { SelectOption } from '../components/select.js';
54
*
65
* @typedef Permissions
76
* @type {object}
@@ -11,7 +10,7 @@
1110
* @type {object}
1211
* @property {ProjectSummary} project_summary
1312
* @property {TestSuiteSummary} test_suites
14-
* @property {SelectOption[]} table_group_filter_options
13+
* @property {FilterOption[]} table_group_filter_options
1514
* @property {Permissions} permissions
1615
*/
1716
import van from '../van.min.js';

testgen/ui/components/frontend/js/types.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
11
/**
2+
* @typedef FilterOption
3+
* @type {object}
4+
* @property {string} label
5+
* @property {string} value
6+
* @property {boolean} selected
7+
*
28
* @typedef ProjectSummary
39
* @type {object}
410
* @property {string} project_code

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)