diff options
| -rw-r--r-- | fg21sim/configs/manager.py | 27 | 
1 files changed, 24 insertions, 3 deletions
diff --git a/fg21sim/configs/manager.py b/fg21sim/configs/manager.py index a446057..8d2cab5 100644 --- a/fg21sim/configs/manager.py +++ b/fg21sim/configs/manager.py @@ -174,19 +174,40 @@ class ConfigManager:              "/"-separated string specifying the config name of the              file/directory +        Returns +        ------- +        path : str +            The absolute path (if user configuration loaded) or relative +            path specified by the input key, or `None` if specified config +            is `None`. + +        Raises +        ------ +        ValueError: +            If the value of the specified config is not string. +          NOTE          ----          - The "~" (tilde) inside path is expanded to the user home directory.          - The relative path (with respect to the user configuration file)            is converted to absolute path if `self.userconfig` presents.          """ -        path = os.path.expanduser(self.getn(key)) +        value = self.getn(key) +        if value is None: +            logger.warning("Specified config '%s' is None or not exist" % key) +            return None +        if not isinstance(value, str): +            msg = "Specified config '%s' is non-string: %s" % (key, value) +            logger.error(msg) +            raise ValueError(msg) +        # +        path = os.path.expanduser(value)          if not os.path.isabs(path): -            # relative path +            # Got relative path, try to convert to the absolute path              if hasattr(self, "userconfig"): +                # User configuration loaded                  path = os.path.join(os.path.dirname(self.userconfig), path)              else: -                # cannot convert to the absolute path                  logger.warning("Cannot convert to absolute path: %s" % path)          return os.path.normpath(path)  | 
