From aa2359e2c1420902a8049e73e695a8e547414488 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Pal=CC=8Co?= Date: Mon, 5 Oct 2026 21:45:29 +0200 Subject: [PATCH 1/2] Fix DNP and variant fields being ignored with field case normalization With normalize_field_case, extra field names are lowercased in the component data, but the dialog and --dnp-field / --variant-field keep the original case (e.g. "DNP"). skip_component looked the names up as-is, so DNP parts stayed in the BOM, a variant whitelist excluded everything and a variant blacklist did nothing. Lowercase both names before the lookup, like generate_bom already does for shown fields. The settings dialog had the same problem when listing the values of the selected variant field, so the whitelist/blacklist choices came up empty. Lowercase the selection there too, and since normalization drops empty values, offer for components without the field, matching how skip_component treats them. Co-Authored-By: Claude Opus 5.5 --- InteractiveHtmlBom/core/ibom.py | 21 +++++++++++++------- InteractiveHtmlBom/dialog/settings_dialog.py | 9 +++++++-- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/InteractiveHtmlBom/core/ibom.py b/InteractiveHtmlBom/core/ibom.py index e8af1cc3..0fb4667c 100644 --- a/InteractiveHtmlBom/core/ibom.py +++ b/InteractiveHtmlBom/core/ibom.py @@ -64,23 +64,30 @@ def skip_component(m, config): if config.blacklist_virtual and m.attr == 'Virtual': return True + dnp_field = config.dnp_field + variant_field = config.board_variant_field + if config.normalize_field_case: + # extra field names are lowercased when normalizing case + dnp_field = dnp_field and dnp_field.lower() + variant_field = variant_field and variant_field.lower() + # skip components with dnp field not empty - if config.dnp_field \ - and config.dnp_field in m.extra_fields \ - and m.extra_fields[config.dnp_field]: + if dnp_field \ + and dnp_field in m.extra_fields \ + and m.extra_fields[dnp_field]: return True # skip components with wrong variant field empty_str = '' - if config.board_variant_field and config.board_variant_whitelist: - ref_variant = m.extra_fields.get(config.board_variant_field, '') + if variant_field and config.board_variant_whitelist: + ref_variant = m.extra_fields.get(variant_field, '') if ref_variant == '': ref_variant = empty_str if ref_variant not in config.board_variant_whitelist: return True - if config.board_variant_field and config.board_variant_blacklist: - ref_variant = m.extra_fields.get(config.board_variant_field, '') + if variant_field and config.board_variant_blacklist: + ref_variant = m.extra_fields.get(variant_field, '') if ref_variant == '': ref_variant = empty_str if ref_variant != empty_str and ref_variant in config.board_variant_blacklist: diff --git a/InteractiveHtmlBom/dialog/settings_dialog.py b/InteractiveHtmlBom/dialog/settings_dialog.py index a976a0dc..c6e653f6 100644 --- a/InteractiveHtmlBom/dialog/settings_dialog.py +++ b/InteractiveHtmlBom/dialog/settings_dialog.py @@ -360,10 +360,15 @@ def OnBoardVariantFieldChange(self, event): self.boardVariantWhitelist.Clear() self.boardVariantBlacklist.Clear() return + normalize = self.normalizeCaseCheckbox.Value + if normalize: + # extra field names are lowercased when normalizing case + selection = selection.lower() variant_set = set() for _, field_dict in self.extra_field_data.fields_by_ref.items(): - if selection in field_dict: - v = field_dict[selection] + # empty values are dropped when normalizing case + if selection in field_dict or normalize: + v = field_dict.get(selection, "") if v == "": v = self.EMPTY_STRING variant_set.add(v) From d23a4c3515bba92a44232c595a4bb98050d023cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Pal=CC=8Co?= Date: Fri, 9 Oct 2026 13:57:09 +0200 Subject: [PATCH 2/2] Don't offer variant for components missing the field Co-Authored-By: Claude Opus 5.5 --- InteractiveHtmlBom/dialog/settings_dialog.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/InteractiveHtmlBom/dialog/settings_dialog.py b/InteractiveHtmlBom/dialog/settings_dialog.py index c6e653f6..0489e25e 100644 --- a/InteractiveHtmlBom/dialog/settings_dialog.py +++ b/InteractiveHtmlBom/dialog/settings_dialog.py @@ -360,15 +360,13 @@ def OnBoardVariantFieldChange(self, event): self.boardVariantWhitelist.Clear() self.boardVariantBlacklist.Clear() return - normalize = self.normalizeCaseCheckbox.Value - if normalize: + if self.normalizeCaseCheckbox.Value: # extra field names are lowercased when normalizing case selection = selection.lower() variant_set = set() for _, field_dict in self.extra_field_data.fields_by_ref.items(): - # empty values are dropped when normalizing case - if selection in field_dict or normalize: - v = field_dict.get(selection, "") + if selection in field_dict: + v = field_dict[selection] if v == "": v = self.EMPTY_STRING variant_set.add(v)