diff --git a/sonar/settings.py b/sonar/settings.py index 60b341f2..9b9217b8 100644 --- a/sonar/settings.py +++ b/sonar/settings.py @@ -207,11 +207,11 @@ def reload(self, data: types.ApiPayload) -> None: elif self.key == COMPONENT_VISIBILITY: self.value = data.get("visibility", None) elif self.key == "sonar.login.message": - self.value: Optional[Any] = None + self.value = None if "values" in data and isinstance(data["values"], list) and len(data["values"]) > 0: self.value = data["values"][0] else: - self.value = next((data[key] for key in ("fieldValues", "values", "value") if key in data), None) + self.value = util.convert_to_type(next((data[key] for key in ("fieldValues", "values", "value") if key in data), None)) if not self.value and "defaultValue" in data: self.value = util.DEFAULT self.__reload_inheritance(data) diff --git a/sonar/utilities.py b/sonar/utilities.py index 2d4c6ffe..f4910d81 100644 --- a/sonar/utilities.py +++ b/sonar/utilities.py @@ -159,8 +159,10 @@ def redacted_token(token: str) -> str: return re.sub(r"(..).*(..)", r"\1***\2", token) -def convert_to_type(value: Any) -> Any: +def convert_to_type(value: str) -> Any: """Converts a potentially string value to the corresponding int or float""" + if not isinstance(value, str): + return value try: return int(value) except ValueError: @@ -169,6 +171,10 @@ def convert_to_type(value: Any) -> Any: return float(value) except ValueError: pass + try: + return bool(value) + except ValueError: + pass return value