Skip to content

Commit 56b8c6b

Browse files
committed
fix overrides
1 parent 46094b4 commit 56b8c6b

File tree

2 files changed

+48
-35
lines changed

2 files changed

+48
-35
lines changed

classes/protocol_settings.py

Lines changed: 43 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -345,7 +345,7 @@ def load_registry_overrides(self, override_path, keys : list[str]):
345345
reader = csv.DictReader(csvfile)
346346
for row in reader:
347347
for key in keys:
348-
key_value = row[key]
348+
key_value = row[key].strip().lower().replace(' ', '_')
349349
if key_value:
350350
overrides[key][key_value] = row
351351
return overrides
@@ -367,25 +367,25 @@ def load__registry(self, path, registry_type : Registry_Type = Registry_Type.INP
367367

368368

369369
overrides : dict[str, dict] = None
370-
override_keys = ['documented name', 'registry']
370+
override_keys = ['documented name', 'register']
371371
overrided_keys = set()
372372
''' list / set of keys that were used for overriding. to track unique entries'''
373373

374374
#assuming path ends with .csv
375-
overrides_path = path[:-4] + '.overrides.csv'
375+
override_path = path[:-4] + '.override.csv'
376376

377-
if os.path.exists(overrides_path):
378-
self._log.info("loading override file: " + overrides_path)
377+
if os.path.exists(override_path):
378+
self._log.info("loading override file: " + override_path)
379379

380-
overrides = self.load_registry_overrides(override_keys)
380+
overrides = self.load_registry_overrides(override_path, override_keys)
381381

382382
def determine_delimiter(first_row) -> str:
383383
if first_row.count(';') > first_row.count(','):
384384
return ';'
385385
else:
386386
return ','
387387

388-
def process_row():
388+
def process_row(row):
389389
# Initialize variables to hold numeric and character parts
390390
numeric_part = 1
391391
character_part = ''
@@ -409,24 +409,25 @@ def process_row():
409409
#clean up doc name, for extra parsing
410410
row['documented name'] = row['documented name'].strip().lower().replace(' ', '_')
411411

412-
#apply overrides using documented name or register
413-
override_row = None
414-
# Check each key in order until a match is found
415-
for key in override_keys:
416-
key_value = row.get(key)
417-
if key_value and key_value in overrides[key]:
418-
override_row = overrides[key][key_value]
419-
overrided_keys.add(key_value)
420-
break
421-
422-
# Apply non-empty override values if an override row is found
423-
if override_row:
424-
for field, override_value in override_row.items():
425-
if override_value: # Only replace if override value is non-empty
426-
row[field] = override_value
412+
if overrides != None:
413+
#apply overrides using documented name or register
414+
override_row = None
415+
# Check each key in order until a match is found
416+
for key in override_keys:
417+
key_value = row.get(key)
418+
if key_value and key_value in overrides[key]:
419+
override_row = overrides[key][key_value]
420+
overrided_keys.add(key_value)
421+
break
422+
423+
# Apply non-empty override values if an override row is found
424+
if override_row:
425+
for field, override_value in override_row.items():
426+
if override_value: # Only replace if override value is non-empty
427+
row[field] = override_value
427428

428429
variable_name = row['variable name'] if row['variable name'] else row['documented name']
429-
variable_name = variable_name = variable_name.strip().lower().replace(' ', '_').replace('__', '_') #clean name
430+
variable_name = variable_name.strip().lower().replace(' ', '_').replace('__', '_') #clean name
430431

431432
if re.search(r"[^a-zA-Z0-9\_]", variable_name) :
432433
self._log.warning("Invalid Name : " + str(variable_name) + " reg: " + str(row['register']) + " doc name: " + str(row['documented name']) + " path: " + str(path))
@@ -611,18 +612,25 @@ def process_row():
611612
for row in reader:
612613
process_row(row)
613614

614-
# Add any unmatched overrides as new entries... probably need to add some better error handling to ensure entry isnt empty ect...
615-
for key in override_keys:
616-
applied = False
617-
for key_value, override_row in overrides[key].items():
618-
if key_value not in overrided_keys:
619-
self._log.info("Loading unique entry from overrides")
620-
process_row(override_row)
621-
applied = True
622-
break
623-
624-
if applied:
625-
continue
615+
if overrides != None:
616+
# Add any unmatched overrides as new entries... probably need to add some better error handling to ensure entry isnt empty ect...
617+
for key in override_keys:
618+
applied = False
619+
for key_value, override_row in overrides[key].items():
620+
# Check if both keys are unique before applying
621+
if all(override_row.get(k) not in overrided_keys for k in override_keys):
622+
self._log.info("Loading unique entry from overrides for both unique keys")
623+
process_row(override_row)
624+
625+
# Mark both keys as applied
626+
for k in override_keys:
627+
overrided_keys.add(override_row.get(k))
628+
629+
applied = True
630+
break # Exit inner loop after applying unique entry
631+
632+
if applied:
633+
continue
626634

627635
for index in reversed(range(len(registry_map))):
628636
item = registry_map[index]
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
variable name,data type,register,documented name,description,values,unit,,,,,,,,,,,
2+
,,0,System Status,System run state,{{system_status_codes}},1,,3: Fault,4: Flash,5: PV charge,6: AC charge,7: Combine charge,8: Combine charge and Bypass,9: PV charge and Bypass,10: AC charge and Bypass, 11: Bypass,12: PV charge andDischarge
3+
OVERRIDE PV VOLTAGE,,,Vpv1,PV1 voltage,,0.1V,,,,,,,,,,,
4+
extra entry,,777,unique extra entry,PV1 voltage,,0.1V,,,,,,,,,,,
5+
extra entry broken,,,unique broken entry,,,-1,,,,,,,,,,,

0 commit comments

Comments
 (0)