diff options
author | Aaron LI <aaronly.me@outlook.com> | 2016-11-04 11:12:51 +0800 |
---|---|---|
committer | Aaron LI <aaronly.me@outlook.com> | 2016-11-04 11:12:51 +0800 |
commit | e1c1340629f3917a4872d4c28b7c3488ab7f5142 (patch) | |
tree | 3fdf4c7aaa028d9f8a7cc38b5c43f54084a8172a /fg21sim/configs/validate.py | |
parent | b7d12ee08b4bc6362cb2682475b28c8ffc04ce5c (diff) | |
download | fg21sim-e1c1340629f3917a4872d4c28b7c3488ab7f5142.tar.bz2 |
configs: Rename "validate.py" and update "validate_configs()"
* Rename "validate.py" to "checkers.py", to avoid the confusion with
the "validate" module from "configobj";
* Rename function "validate_configs()" to "check_configs()";
* "check_configs()": add optional parameter "raise_exception";
* "check_configs()": update to return both the result and errors dict.
Diffstat (limited to 'fg21sim/configs/validate.py')
-rw-r--r-- | fg21sim/configs/validate.py | 167 |
1 files changed, 0 insertions, 167 deletions
diff --git a/fg21sim/configs/validate.py b/fg21sim/configs/validate.py deleted file mode 100644 index 0fd2c64..0000000 --- a/fg21sim/configs/validate.py +++ /dev/null @@ -1,167 +0,0 @@ -# Copyright (c) 2016 Weitian LI <liweitianux@live.com> -# MIT license - -""" -Custom validations for the configurations. - -NOTE ----- -These checker functions check the configurations as a whole, and may check -a config item against its context, -Therefore, they are very different to the checker function of `Validator`. -""" - -import os - -from ..errors import ConfigError - - -def _check_missing(configs, keys): - """Check whether the required config is provided by the user.""" - results = {} - if isinstance(keys, str): - keys = [keys, ] - for key in keys: - if not configs.getn(key): - results[key] = "Value required but missing" - return results - - -def _check_existence(configs, keys): - """Check whether the file/directory corresponding to the config exists.""" - if isinstance(keys, str): - keys = [keys, ] - results = {} - for key in keys: - res = _check_missing(configs, key) - if res == {}: - # Both "key" and "dir_key" are valid - path = configs.get_path(key) - if not os.path.exists(path): - res[key] = 'File/directory not exist: "%s"' % path - results.update(res) - return results - - -def check_frequency(configs): - """Check the "[frequency]" section of the configurations.""" - results = {} - if configs.getn("frequency/type") == "custom": - results.update(_check_missing(configs, "frequency/frequencies")) - elif configs.getn("frequency/type") == "calc": - results.update( - _check_missing(configs, ["frequency/start", - "frequency/stop", - "frequency/step"]) - ) - return results - - -def check_output(configs): - """Check the "[output]" section of the configurations.""" - results = {} - if configs.getn("output/combine"): - results.update(_check_missing(configs, "output/output_dir")) - return results - - -def check_galactic_synchrotron(configs): - """Check the "[galactic][synchrotron]" section of the configurations.""" - comp = "galactic/synchrotron" - comp_enabled = configs.getn("common/components") - results = {} - if comp in comp_enabled: - # Only validate the configs if this component is enabled - results.update( - _check_missing(configs, [comp+"/template_freq", - comp+"/template_unit"]) - ) - results.update( - _check_existence(configs, [comp+"/template", comp+"/indexmap"]) - ) - if configs.getn(comp+"/save"): - results.update(_check_missing(configs, comp+"/output_dir")) - return results - - -def check_galactic_freefree(configs): - """Check the "[galactic][freefree]" section of the configurations.""" - comp = "galactic/freefree" - comp_enabled = configs.getn("common/components") - results = {} - if comp in comp_enabled: - # Only validate the configs if this component is enabled - results.update( - _check_missing(configs, [comp+"/halphamap_unit", - comp+"/dustmap_unit"]) - ) - results.update( - _check_existence(configs, [comp+"/halphamap", comp+"/dustmap"]) - ) - if configs.getn(comp+"/save"): - results.update(_check_missing(configs, comp+"/output_dir")) - return results - - -def check_galactic_snr(configs): - """Check the "[galactic][snr]" section of the configurations.""" - comp = "galactic/snr" - comp_enabled = configs.getn("common/components") - results = {} - if comp in comp_enabled: - # Only validate the configs if this component is enabled - results.update( - _check_existence(configs, comp+"/catalog") - ) - if configs.getn(comp+"/save"): - results.update(_check_missing(configs, comp+"/output_dir")) - return results - - -# Available checkers to validate the configurations -_CHECKERS = [ - check_frequency, - check_output, - check_galactic_synchrotron, - check_galactic_freefree, - check_galactic_snr, -] - - -def validate_configs(configs, checkers=_CHECKERS): - """Validate the configurations through the supplied checkers. - - These checker usually validate on the global scale, and validate - some specific configs against their contexts. - - Parameters - ---------- - configs : `ConfigManager` object - An `ConfigManager` object contains both default and user - configurations. - checkers : list of functions - List of checker functions through which the configurations - will be validated. - - Returns - ------- - bool - True if the configurations pass all checker functions, otherwise, - the `ConfigError` will be raised with corresponding message. - - Raises - ------ - ConfigError - If any configuration failed the check, a `ConfigError` with - details will be raised. - """ - results = {} - for checker in checkers: - results.update(checker(configs)) - # - if results == {}: - return True - else: - err_msg = "\n".join(['Config "{key}": {msg}'.format(key=key, msg=msg) - for key, msg in results.items()]) - raise ConfigError(err_msg) |