From 05d7eff09a2eaf8c2e76419c82dd9ec80130c13c Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Thu, 24 Oct 2019 18:26:47 +0200 Subject: [PATCH] Fix secrets containing unsupported types (#1345) * Fix secrets containing unsupported types * Black * Cleanup --- hassio/secrets.py | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/hassio/secrets.py b/hassio/secrets.py index 9bc0b55cc..e0fed4cdf 100644 --- a/hassio/secrets.py +++ b/hassio/secrets.py @@ -2,18 +2,15 @@ from datetime import timedelta import logging from pathlib import Path -from typing import Dict +from typing import Dict, Union from ruamel.yaml import YAML, YAMLError -import voluptuous as vol from .coresys import CoreSys, CoreSysAttributes from .utils import AsyncThrottle _LOGGER: logging.Logger = logging.getLogger(__name__) -SECRETS_SCHEMA = vol.Schema({str: vol.Any(str, int, None, float)}) - class SecretsManager(CoreSysAttributes): """Manage Home Assistant secrets.""" @@ -21,14 +18,14 @@ class SecretsManager(CoreSysAttributes): def __init__(self, coresys: CoreSys): """Initialize secret manager.""" self.coresys: CoreSys = coresys - self.secrets: Dict[str, str] = {} + self.secrets: Dict[str, Union[bool, float, int, str]] = {} @property def path_secrets(self) -> Path: """Return path to secret file.""" return Path(self.sys_config.path_homeassistant, "secrets.yaml") - def get(self, secret: str) -> str: + def get(self, secret: str) -> Union[bool, float, int, str]: """Get secret from store.""" _LOGGER.info("Request secret %s", secret) return self.secrets.get(secret) @@ -55,10 +52,12 @@ class SecretsManager(CoreSysAttributes): yaml = YAML() data = await self.sys_run_in_executor(yaml.load, self.path_secrets) or {} - self.secrets = SECRETS_SCHEMA(data) + # Filter to only get supported values + self.secrets = { + k: v for k, v in data.items() if isinstance(v, (bool, float, int, str)) + } + except YAMLError as err: _LOGGER.error("Can't process Home Assistant secrets: %s", err) - except vol.Invalid: - _LOGGER.warning("Home Assistant secrets have a invalid format") else: _LOGGER.debug("Reload Home Assistant secrets: %s", len(self.secrets))