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
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
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, )
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", )