diff options
| -rw-r--r-- | fg21sim/configs/checkers.py (renamed from fg21sim/configs/validate.py) | 60 | 
1 files changed, 36 insertions, 24 deletions
diff --git a/fg21sim/configs/validate.py b/fg21sim/configs/checkers.py index 0fd2c64..e225234 100644 --- a/fg21sim/configs/validate.py +++ b/fg21sim/configs/checkers.py @@ -2,13 +2,14 @@  # MIT license  """ -Custom validations for the configurations. +Custom checkers to further validate 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`. +These functions further check the configurations as a whole, which means +one config option may be checked against its context. +Therefore, they are very different to the checker functions used in the +``validate.Validator``.  """  import os @@ -128,40 +129,51 @@ _CHECKERS = [  ] -def validate_configs(configs, checkers=_CHECKERS): -    """Validate the configurations through the supplied checkers. +def check_configs(configs, raise_exception=True, checkers=_CHECKERS): +    """Check/validate the whole configurations through all the supplied +    checker functions. -    These checker usually validate on the global scale, and validate -    some specific configs against their contexts. +    These checker functions may check one config option against its context +    if necessary to determine whether it has a valid value.      Parameters      ---------- -    configs : `ConfigManager` object -        An `ConfigManager` object contains both default and user +    configs : `ConfigManager` instance +        An ``ConfigManager`` instance contains both default and user          configurations. -    checkers : list of functions +    raise_exception : bool, optional +        Whether raise a ``ConfigError`` exception if there is any invalid +        config options? +    checkers : list of functions, optional          List of checker functions through which the configurations -        will be validated. +        will be checked.      Returns      ------- -    bool -        True if the configurations pass all checker functions, otherwise, -        the `ConfigError` will be raised with corresponding message. +    result : bool +        ``True`` if the configurations pass all checker functions. +    errors : dict +        An dictionary containing the details about the invalid config options, +        with the keys identifying the config options and values indicating +        the error message. +        If above ``result=True``, then this is an empty dictionary ``{}``.      Raises      ------      ConfigError -        If any configuration failed the check, a `ConfigError` with -        details will be raised. +        If any config option failed to pass any of the checkers, a +        ``ConfigError`` with details is raised.      """ -    results = {} +    errors = {}      for checker in checkers: -        results.update(checker(configs)) +        errors.update(checker(configs))      # -    if results == {}: -        return True +    if errors == {}: +        result = True      else: -        err_msg = "\n".join(['Config "{key}": {msg}'.format(key=key, msg=msg) -                             for key, msg in results.items()]) -        raise ConfigError(err_msg) +        result = False +        if raise_exception: +            msg = "\n".join(['Config "{key}": {val}'.format(key=key, val=val) +                             for key, val in errors.items()]) +            raise ConfigError(msg) +    return (result, errors)  | 
