11from pathlib import Path
2- from typing import Any , Dict , List , cast
3-
4- import yaml
2+ from typing import List
53
64from sift_py .calculated_channels .config import CalculatedChannelConfig
75from sift_py .ingestion .config .yaml .error import YamlConfigError
8- from sift_py .yaml .utils import _handle_subdir
6+ from sift_py .yaml .utils import _handle_subdir , try_fast_yaml_load
97
108
119def load_calculated_channels (paths : List [Path ]) -> List [CalculatedChannelConfig ]:
@@ -29,36 +27,35 @@ def update_calculated_channels(path: Path):
2927
3028def _read_calculated_channels_yaml (path : Path ) -> List [CalculatedChannelConfig ]:
3129 calculated_channel_configs = []
32- with open (path , "r" ) as f :
33- channel_config_yaml = cast (Dict [str , Any ], yaml .safe_load (f .read ()))
34-
35- calculated_channel_list = channel_config_yaml .get ("calculated_channels" , [])
36- for calc_channel in calculated_channel_list :
37- if not isinstance (calc_channel , dict ):
30+ channel_config_yaml = try_fast_yaml_load (path )
31+
32+ calculated_channel_list = channel_config_yaml .get ("calculated_channels" , [])
33+ for calc_channel in calculated_channel_list :
34+ if not isinstance (calc_channel , dict ):
35+ raise YamlConfigError (
36+ f"Expected 'calculated_channels' to be a list of dictionaries in yaml: '{ path } '"
37+ )
38+ for channel_ref in calc_channel .get ("channel_references" , []):
39+ parsed_channel_refs = []
40+ if not isinstance (channel_ref , dict ):
3841 raise YamlConfigError (
39- f"Expected 'calculated_channels ' to be a list of dictionaries in yaml: '{ path } '"
42+ f"Expected 'channel_references ' to be a list of dictionaries in yaml: '{ path } '"
4043 )
41- for channel_ref in calc_channel .get ("channel_references" , []):
42- parsed_channel_refs = []
43- if not isinstance (channel_ref , dict ):
44- raise YamlConfigError (
45- f"Expected 'channel_references' to be a list of dictionaries in yaml: '{ path } '"
46- )
47- if "channel_reference" not in channel_ref :
48- for k , v in channel_ref .items ():
49- parsed_channel_refs .append (dict (channel_reference = k , channel_identifier = v ))
50- else :
51- parsed_channel_refs .append (channel_ref )
52- calc_channel ["channel_references" ] = parsed_channel_refs
53-
54- if not isinstance (calculated_channel_list , list ):
55- raise YamlConfigError (f"Expected 'calculated_channels' to be a list in yaml: '{ path } '" )
44+ if "channel_reference" not in channel_ref :
45+ for k , v in channel_ref .items ():
46+ parsed_channel_refs .append (dict (channel_reference = k , channel_identifier = v ))
47+ else :
48+ parsed_channel_refs .append (channel_ref )
49+ calc_channel ["channel_references" ] = parsed_channel_refs
50+
51+ if not isinstance (calculated_channel_list , list ):
52+ raise YamlConfigError (f"Expected 'calculated_channels' to be a list in yaml: '{ path } '" )
53+
54+ for calc_channel in calculated_channel_list :
55+ try :
56+ calc_channel_cfg = CalculatedChannelConfig (** calc_channel )
57+ calculated_channel_configs .append (calc_channel_cfg )
58+ except Exception as e :
59+ raise YamlConfigError (f"Error parsing calculated channel '{ calc_channel } '" ) from e
5660
57- for calc_channel in calculated_channel_list :
58- try :
59- calc_channel_cfg = CalculatedChannelConfig (** calc_channel )
60- calculated_channel_configs .append (calc_channel_cfg )
61- except Exception as e :
62- raise YamlConfigError (f"Error parsing calculated channel '{ calc_channel } '" ) from e
63-
64- return calculated_channel_configs
61+ return calculated_channel_configs
0 commit comments