From 793d01ab13b14e3405c47d23b9301d37e465d7bd Mon Sep 17 00:00:00 2001 From: Uri Shaked Date: Tue, 23 Apr 2024 00:10:44 +0300 Subject: [PATCH] feat(tt_tool): improve "pinout" section validation - Verify that the user filled the pinout (at least one pin description) - Disallow unrecognized keys --- project_info.py | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/project_info.py b/project_info.py index 7980b78..57cc815 100644 --- a/project_info.py +++ b/project_info.py @@ -11,23 +11,34 @@ class ProjectYamlError(Exception): class PinoutSection: def __init__(self, yaml_data: Dict[str, Any]): + self.__nonEmptyPins = 0 + yaml_data = yaml_data.copy() self.ui = self._pins(yaml_data, "ui", 8) self.uo = self._pins(yaml_data, "uo", 8) self.uio = self._pins(yaml_data, "uio", 8) - self.ua: List[str] = [] - for i in range(8): - pin = yaml_data.get(f"ua[{i}]") - if pin is None: - break - self.ua.append(pin) + self.ua: List[str] = self._pins(yaml_data, "ua", 8, True) + if self.__nonEmptyPins == 0: + raise ProjectYamlError("Please fill in the 'pinout' section") + if len(yaml_data) > 0: + raise ProjectYamlError( + f"Invalid keys {list(yaml_data.keys())} in 'pinout' section. Please remove them." + ) - def _pins(self, yaml_data: Dict[str, Any], name: str, count: int) -> List[str]: + def _pins( + self, yaml_data: Dict[str, Any], name: str, count: int, optional: bool = False + ) -> List[str]: result: List[str] = [] for i in range(count): - pin = yaml_data.get(f"{name}[{i}]") + key = f"{name}[{i}]" + pin = yaml_data.get(key) if pin is None: + if optional: + break raise ProjectYamlError(f"Missing '{name}[{i}]' in 'pinout' section") + if pin != "": + self.__nonEmptyPins += 1 result.append(pin) + del yaml_data[key] return result