Skip to content

Commit 0c4207f

Browse files
More SonarQube issue fixes
1 parent 92c3563 commit 0c4207f

File tree

1 file changed

+99
-31
lines changed

1 file changed

+99
-31
lines changed

pages/datasets/investigation_dataset_page.py

Lines changed: 99 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1266,21 +1266,17 @@ def _extract_field_value(self, element: Locator) -> str:
12661266
case "select":
12671267
selected_option = value_from_list.locator("option:checked")
12681268
field_value += selected_option.inner_text()
1269-
continue
12701269
case "li":
12711270
input_elem = value_from_list.locator("input")
12721271
if input_elem.is_checked():
12731272
label_elem = value_from_list.locator("label")
12741273
return label_elem.inner_text()
1275-
continue
12761274
case "input":
12771275
input_type = value_from_list.get_attribute("type")
12781276
if input_type == "text":
12791277
field_value += value_from_list.input_value()
1280-
continue
12811278
case "p":
12821279
field_value += value_from_list.inner_text()
1283-
continue
12841280
case _:
12851281
logging.debug(f"tag type not specified, tag ignored = {tag_name}")
12861282
return field_value
@@ -1345,34 +1341,106 @@ def _process_rows_for_field_mapping(
13451341
"""
13461342
for row in list_of_rows:
13471343
elements_in_row = row.locator("xpath=.//*").all()
1348-
element_to_map = None
1349-
1350-
for element in elements_in_row:
1351-
element_class = element.get_attribute("class") or ""
1352-
if "label" in element_class:
1353-
previous_field = field_name
1354-
field_name = element.inner_text().lower().replace(" ?", "").strip()
1355-
if field_name in fields_and_elements:
1356-
name_counter = 2
1357-
while f"{field_name} ({name_counter})" in fields_and_elements:
1358-
name_counter += 1
1359-
field_name = f"{field_name} ({name_counter})"
1360-
elif "userInput" in element_class:
1361-
element_to_map = element
1362-
1363-
if field_name.replace(" ", "") != "":
1364-
fields_and_elements[field_name] = element_to_map
1365-
line_counter = 2
1366-
else:
1367-
if (
1368-
hasattr(self, "list_of_multi_line_fields")
1369-
and previous_field in self.list_of_multi_line_fields
1370-
):
1371-
field_name = previous_field
1372-
fields_and_elements[f"{field_name} ({line_counter})"] = (
1373-
element_to_map
1344+
field_name, previous_field, element_to_map = (
1345+
self._extract_field_and_element(
1346+
elements_in_row, field_name, previous_field, fields_and_elements
1347+
)
1348+
)
1349+
if element_to_map is None:
1350+
raise ValueError(
1351+
f"Could not find element to map for field '{field_name}'"
1352+
)
1353+
line_counter = self._update_fields_and_elements(
1354+
fields_and_elements,
1355+
field_name,
1356+
previous_field,
1357+
element_to_map,
1358+
line_counter,
1359+
)
1360+
1361+
def _extract_field_and_element(
1362+
self,
1363+
elements_in_row: list,
1364+
field_name: str,
1365+
previous_field: str,
1366+
fields_and_elements: dict,
1367+
) -> tuple[str, str, Optional[Locator]]:
1368+
"""
1369+
Extracts the field name and element to map from the elements in a row.
1370+
1371+
Args:
1372+
elements_in_row (list): List of Playwright Locator elements in the row.
1373+
field_name (str): The current field label being processed.
1374+
previous_field (str): The previous field label encountered.
1375+
fields_and_elements (dict): Dictionary to store field label to Locator mappings.
1376+
1377+
Returns:
1378+
tuple[str, str, Locator]: Updated field_name, previous_field, and element_to_map.
1379+
"""
1380+
element_to_map = None
1381+
for element in elements_in_row:
1382+
element_class = element.get_attribute("class") or ""
1383+
if "label" in element_class:
1384+
previous_field = field_name
1385+
field_name = element.inner_text().lower().replace(" ?", "").strip()
1386+
if field_name in fields_and_elements:
1387+
field_name = self._resolve_field_name_conflict(
1388+
fields_and_elements, field_name
13741389
)
1375-
line_counter += 1
1390+
elif "userInput" in element_class:
1391+
element_to_map = element
1392+
return field_name, previous_field, element_to_map
1393+
1394+
def _resolve_field_name_conflict(
1395+
self, fields_and_elements: dict, field_name: str
1396+
) -> str:
1397+
"""
1398+
Resolves field name conflicts by appending a counter.
1399+
1400+
Args:
1401+
fields_and_elements (dict): Dictionary to store field label to Locator mappings.
1402+
field_name (str): The field name to resolve.
1403+
1404+
Returns:
1405+
str: The resolved field name with a counter appended.
1406+
"""
1407+
name_counter = 2
1408+
while f"{field_name} ({name_counter})" in fields_and_elements:
1409+
name_counter += 1
1410+
return f"{field_name} ({name_counter})"
1411+
1412+
def _update_fields_and_elements(
1413+
self,
1414+
fields_and_elements: dict,
1415+
field_name: str,
1416+
previous_field: str,
1417+
element_to_map: Locator,
1418+
line_counter: int,
1419+
) -> int:
1420+
"""
1421+
Updates the fields_and_elements dictionary with the field name and element, handling multi-line fields.
1422+
1423+
Args:
1424+
fields_and_elements (dict): Dictionary to store field label to Locator mappings.
1425+
field_name (str): The current field label being processed.
1426+
previous_field (str): The previous field label encountered.
1427+
element_to_map (Locator): The element to map.
1428+
line_counter (int): Counter for multi-line fields.
1429+
1430+
Returns:
1431+
int: The updated line_counter value.
1432+
"""
1433+
if field_name.replace(" ", "") != "":
1434+
fields_and_elements[field_name] = element_to_map
1435+
return 2
1436+
if (
1437+
hasattr(self, "list_of_multi_line_fields")
1438+
and previous_field in self.list_of_multi_line_fields
1439+
):
1440+
field_name = previous_field
1441+
fields_and_elements[f"{field_name} ({line_counter})"] = element_to_map
1442+
return line_counter + 1
1443+
return line_counter
13761444

13771445
def assert_test_result(self, expected_text: str) -> None:
13781446
"""

0 commit comments

Comments
 (0)