Esempio n. 1
0
    def parse(
            self,
            setting: Unset[Setting],
            key: t.Tuple[str, ...] = (),
    ) -> Unset[T]:
        """Parses the given setting value.

        Args:
            setting: Setting to parse.
            key: Current nested value in the setting. This is used to give
                context to ParsingError messages.

        Returns:
            Parsed value or MISSING if the value is missing.
        """
        if setting is MISSING:
            for fallback in self.fallbacks:
                setting = fallback()
                if setting is not MISSING:
                    break
            if setting is MISSING:
                if self.required:
                    raise ValidationError(
                        "Expected setting value but received none.",
                        key=key,
                    )
                if self.default is not MISSING:
                    return self.default
                return setting
        setting = self.transform(setting, key=key)
        self.validate(setting, key=key)
        return setting
Esempio n. 2
0
 def validate(self, setting: T, key: t.Tuple[str, ...] = ()) -> None:
     self._validate(setting, key=key)
     for validator in self.validators:
         try:
             setting = validator(setting)
         except ValidationError as error:
             error.key = key
             raise error
         except Exception as error:
             raise ValidationError(
                 "Encountered unexpected error while validating setting "
                 "value.",
                 key=key,
             ) from error
Esempio n. 3
0
 def _validate(self, setting: T, key: t.Tuple[str, ...] = ()) -> None:
     if not isinstance(setting, list):
         raise ValidationError(
             f"Expected setting to be a list but received {setting!r}",
             key=key,
         )
Esempio n. 4
0
def is_valid_level(value: str) -> None:
    """Determines if the logging level value in the config is a valid level."""
    level = logging.getLevelName(value)
    if not isinstance(level, int):
        raise ValidationError(f"{value!r} is not a valid logging level", )