Skip to content

Commit d743e34

Browse files
committed
fix(configuration_step): Warn instead of crashing
1 parent 4b409fd commit d743e34

2 files changed

Lines changed: 39 additions & 4 deletions

File tree

ardupilot_methodic_configurator/data_model_configuration_step.py

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,17 @@
1313

1414
import re
1515
from logging import info as logging_info
16+
from logging import warning as logging_warning
1617
from typing import Any, Optional
1718

1819
from ardupilot_methodic_configurator import _
1920
from ardupilot_methodic_configurator.backend_filesystem import LocalFilesystem
2021
from ardupilot_methodic_configurator.data_model_ardupilot_parameter import ArduPilotParameter
2122
from ardupilot_methodic_configurator.data_model_par_dict import Par, ParDict, is_within_tolerance
22-
from ardupilot_methodic_configurator.data_model_safe_evaluator import safe_evaluate
23+
from ardupilot_methodic_configurator.data_model_safe_evaluator import (
24+
ConfigurationStepEvalError,
25+
safe_evaluate,
26+
)
2327

2428

2529
class ConfigurationStepProcessor:
@@ -200,9 +204,16 @@ def _handle_connection_renaming(
200204
return [], set(), []
201205

202206
# Calculate rename operations WITHOUT mutating file_parameters
203-
duplicated_parameters, renamed_pairs = self._calculate_connection_rename_operations(
204-
self.local_filesystem.file_parameters[selected_file], new_connection_prefix, variables
205-
)
207+
try:
208+
duplicated_parameters, renamed_pairs = self._calculate_connection_rename_operations(
209+
self.local_filesystem.file_parameters[selected_file], new_connection_prefix, variables
210+
)
211+
except ConfigurationStepEvalError as exc:
212+
logging_warning(
213+
_("Skipping connection renaming because evaluation failed: %s"),
214+
str(exc),
215+
)
216+
return [], set(), []
206217

207218
ui_infos: list[tuple[str, str]] = []
208219

tests/test_data_model_configuration_step.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,30 @@ def test_user_can_rename_connection_parameters_successfully(self, processor, fc_
265265
assert ui_errors == []
266266
assert isinstance(parameters, dict)
267267

268+
def test_optional_connection_lookup_missing_does_not_crash(self, processor, fc_parameters) -> None:
269+
"""
270+
Connection renaming should be skipped when an optional component lookup is missing.
271+
272+
GIVEN: A rename_connection expression referring to a missing optional vehicle component
273+
WHEN: The configuration step is processed
274+
THEN: Processing should complete without raising an exception
275+
AND: No rename operations should be applied
276+
"""
277+
selected_file = "test_file.param"
278+
processor.local_filesystem.configuration_steps = {
279+
selected_file: {"rename_connection": "vehicle_components['GNSS Receiver']['FC Connection']['Type']"}
280+
}
281+
282+
parameters, ui_errors, ui_infos, duplicates_to_remove, renames_to_apply, _ = processor.process_configuration_step(
283+
selected_file, fc_parameters
284+
)
285+
286+
assert ui_errors == []
287+
assert ui_infos == []
288+
assert duplicates_to_remove == set()
289+
assert renames_to_apply == []
290+
assert isinstance(parameters, dict)
291+
268292
def test_user_receives_feedback_about_duplicate_parameter_removal(self, processor, fc_parameters) -> None:
269293
"""
270294
User receives clear feedback when duplicate parameters are removed during renaming.

0 commit comments

Comments
 (0)