From b4a9e6c7eabfdd6dee7460a163a0aec271b06bac Mon Sep 17 00:00:00 2001 From: Uri Shaked Date: Wed, 4 Feb 2026 14:55:56 +0200 Subject: [PATCH] fix(project): only require non-empty pinout with --check-docs --- project_checks.py | 2 +- project_info.py | 15 +++++++++++---- test_project_info.py | 11 ++++++++++- 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/project_checks.py b/project_checks.py index 05e4bd7..85c4961 100644 --- a/project_checks.py +++ b/project_checks.py @@ -41,7 +41,7 @@ def check_info_yaml(project_dir: str, pdk: str) -> list[str]: tile_sizes = yaml.safe_load(f) try: - _ = ProjectInfo(yaml_data, tile_sizes) + _ = ProjectInfo(yaml_data, tile_sizes, require_pinout=True) except Exception as e: if isinstance(e, ProjectYamlError): return e.errors diff --git a/project_info.py b/project_info.py index 6a3cf2b..ee49b9a 100644 --- a/project_info.py +++ b/project_info.py @@ -12,14 +12,16 @@ class ProjectYamlError(Exception): class PinoutSection: - def __init__(self, yaml_data: Dict[str, Any], errors: List[str]): + def __init__( + self, yaml_data: Dict[str, Any], errors: List[str], require_pinout: bool = False + ): self.__nonEmptyPins = 0 yaml_data = yaml_data.copy() self.ui = self._pins(yaml_data, "ui", 8, errors) self.uo = self._pins(yaml_data, "uo", 8, errors) self.uio = self._pins(yaml_data, "uio", 8, errors) self.ua = self._pins(yaml_data, "ua", 6, errors, True) - if self.__nonEmptyPins == 0: + if require_pinout and self.__nonEmptyPins == 0: errors.append("Please fill in the 'pinout' section") if len(yaml_data) > 0: errors.append( @@ -55,7 +57,12 @@ class ProjectInfo: top_module: str source_files: List[str] - def __init__(self, yaml_data: Dict[str, Any], tile_sizes: Dict[str, str]): + def __init__( + self, + yaml_data: Dict[str, Any], + tile_sizes: Dict[str, str], + require_pinout: bool = False, + ): errors: List[str] = [] # Validate Version @@ -179,7 +186,7 @@ class ProjectInfo: if "pinout" not in yaml_data: errors.append("Missing 'pinout' section") else: - self.pinout = PinoutSection(yaml_data["pinout"], errors) + self.pinout = PinoutSection(yaml_data["pinout"], errors, require_pinout) # Optional fields self.discord: Optional[str] = project_section.get("discord") diff --git a/test_project_info.py b/test_project_info.py index e867c2b..58bdb64 100644 --- a/test_project_info.py +++ b/test_project_info.py @@ -315,7 +315,16 @@ class TestProjectInfoPinoutSection: with pytest.raises( ProjectYamlError, match="Please fill in the 'pinout' section" ): - ProjectInfo(valid_yaml_data, tile_sizes) + ProjectInfo(valid_yaml_data, tile_sizes, require_pinout=True) + + def test_all_empty_pinout_allowed_without_require_pinout( + self, valid_yaml_data, tile_sizes + ): + for pin in valid_yaml_data["pinout"]: + valid_yaml_data["pinout"][pin] = "" + # Should not raise an error when require_pinout is False (default) + info = ProjectInfo(valid_yaml_data, tile_sizes) + assert info.pinout is not None def test_invalid_pinout_keys(self, valid_yaml_data, tile_sizes): valid_yaml_data["pinout"]["invalid_key"] = "value"