Skip to content

Commit 341cda4

Browse files
committed
Fixes for config
* Order of selected extra fields is preserved * Extra fields with commas are saved with escaping and loaded correctly * Variant whitelist/blacklist are loaded from args correctly
1 parent 6590f8c commit 341cda4

File tree

1 file changed

+15
-6
lines changed

1 file changed

+15
-6
lines changed

InteractiveHtmlBom/core/config.py

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,10 @@ def _split(s):
8181
"""Splits string by ',' and drops empty strings from resulting array."""
8282
return [a.replace('\\,', ',') for a in re.split(r'(?<!\\),', s) if a]
8383

84+
@staticmethod
85+
def _join(lst):
86+
return ','.join([s.replace(',', '\\,') for s in lst])
87+
8488
def __init__(self):
8589
"""Init from config file if it exists."""
8690
if not os.path.isfile(self.config_file):
@@ -121,7 +125,7 @@ def __init__(self):
121125
f.SetPath('/extra_fields')
122126
self.extra_fields = self._split(f.Read(
123127
'extra_fields',
124-
','.join(self.extra_fields)))
128+
self._join(self.extra_fields)))
125129
self.normalize_field_case = f.ReadBool(
126130
'normalize_field_case', self.normalize_field_case)
127131
self.board_variant_field = f.Read(
@@ -167,7 +171,7 @@ def save(self):
167171
f.WriteBool('include_nets', self.include_nets)
168172

169173
f.SetPath('/extra_fields')
170-
f.Write('extra_fields', ','.join(self.extra_fields))
174+
f.Write('extra_fields', self._join(self.extra_fields))
171175
f.WriteBool('normalize_field_case', self.normalize_field_case)
172176
f.Write('board_variant_field', self.board_variant_field)
173177
f.Write('board_variant_whitelist',
@@ -258,7 +262,12 @@ def transfer_to_dialog(self, dlg):
258262

259263
def safe_set_checked_strings(clb, strings):
260264
safe_strings = list(clb.GetStrings())
261-
clb.SetCheckedStrings([s for s in strings if s in safe_strings])
265+
if safe_strings:
266+
present_strings = [s for s in strings if s in safe_strings]
267+
not_present_strings = [s for s in safe_strings if s not in strings]
268+
clb.Clear()
269+
clb.InsertItems(present_strings + not_present_strings, 0)
270+
clb.SetCheckedStrings(present_strings)
262271

263272
safe_set_checked_strings(dlg.extra.extraFieldsList, self.extra_fields)
264273
dlg.extra.normalizeCaseCheckbox.Value = self.normalize_field_case
@@ -340,7 +349,7 @@ def add_options(self, parser, file_name_format_hint):
340349
parser.add_argument('--netlist-file',
341350
help='Path to netlist or xml file.')
342351
parser.add_argument('--extra-fields',
343-
default=','.join(self.extra_fields),
352+
default=self._join(self.extra_fields),
344353
help='Comma separated list of extra fields to '
345354
'pull from netlist or xml file.')
346355
parser.add_argument('--normalize-field-case',
@@ -393,8 +402,8 @@ def set_from_args(self, args):
393402
self.extra_fields = self._split(args.extra_fields)
394403
self.normalize_field_case = args.normalize_field_case
395404
self.board_variant_field = args.variant_field
396-
self.board_variant_whitelist = args.variants_whitelist
397-
self.board_variant_blacklist = args.variants_blacklist
405+
self.board_variant_whitelist = self._split(args.variants_whitelist)
406+
self.board_variant_blacklist = self._split(args.variants_blacklist)
398407
self.dnp_field = args.dnp_field
399408

400409
def get_html_config(self):

0 commit comments

Comments
 (0)