in lib/metric-config-parser/metric_config_parser/config.py [0:0]
def validate_config_settings(config_file: Path) -> None:
"""
Implemented to resolve a Github issue:
- https://github.com/mozilla/jetstream/issues/843
Loads external config file and runs a number of validation steps on it:
- Checks that all config keys/settings are lowercase
- Checks for missing core config keys
- Checks for unexpected core configuration keys
- Checks that all segments defined under experiment have configuration in segments section
- Checks if metric with custom config is defined in metrics.weekly or metrics.overall fields
Returns None, if issues found with the configuration an Exception is raised
"""
config = toml.loads(config_file.read_text())
optional_core_config_keys = (
"project",
"population",
"metrics",
"experiment",
"segments",
"data_sources",
"friendly_name",
"description",
"parameters",
"alerts",
"dimensions",
"functions",
)
core_config_keys_specified = config.keys()
# checks for unexpected core configuration keys
unexpected_config_keys = set(core_config_keys_specified) - set(optional_core_config_keys)
if unexpected_config_keys:
err_msg = (
f"Unexpected config key[s] found: {unexpected_config_keys}. "
f"config_file: {str(config_file).split('/')[-1]}"
)
raise UnexpectedKeyConfigurationException(err_msg)
return None