diff --git a/piker/data/_symcache.py b/piker/data/_symcache.py index 1f1cb9ec..cfcf6ce6 100644 --- a/piker/data/_symcache.py +++ b/piker/data/_symcache.py @@ -105,6 +105,15 @@ class SymbologyCache(Struct): def write_config(self) -> None: + def clean_dict_for_toml(d): + '''Remove None values from dict recursively for TOML serialization''' + if isinstance(d, dict): + return {k: clean_dict_for_toml(v) for k, v in d.items() if v is not None} + elif isinstance(d, list): + return [clean_dict_for_toml(item) for item in d if item is not None] + else: + return d + # put the backend's pair-struct type ref at the top # of file if possible. cachedict: dict[str, Any] = { @@ -125,7 +134,9 @@ class SymbologyCache(Struct): dct = cachedict[key] = {} for key, struct in table.items(): - dct[key] = struct.to_dict(include_non_members=False) + raw_dict = struct.to_dict(include_non_members=False) + # Clean None values for TOML compatibility + dct[key] = clean_dict_for_toml(raw_dict) try: with self.fp.open(mode='wb') as fp: