From 6a7617faad66b3534155b419e25ca87b5bfea4b9 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Fri, 18 Aug 2017 15:57:13 +0200 Subject: [PATCH] Use deepmerge for options (#157) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add an optional extended description… --- hassio/addons/addon.py | 11 +++++++---- setup.py | 3 ++- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/hassio/addons/addon.py b/hassio/addons/addon.py index 474756116..2fc9b643e 100644 --- a/hassio/addons/addon.py +++ b/hassio/addons/addon.py @@ -8,6 +8,7 @@ import shutil import tarfile from tempfile import TemporaryDirectory +from deepmerge import Merger import voluptuous as vol from voluptuous.humanize import humanize_error @@ -30,6 +31,8 @@ _LOGGER = logging.getLogger(__name__) RE_VOLUME = re.compile(MAP_VOLUME) RE_WEBUI = re.compile(r"^(.*\[HOST\]:)\[PORT:(\d+)\](.*)$") +MERGE_OPT = Merger([(dict, ['merge'])], ['override'], ['override']) + class Addon(object): """Hold data for addon inside HassIO.""" @@ -104,10 +107,10 @@ class Addon(object): def options(self): """Return options with local changes.""" if self.is_installed: - return { - **self.data.system[self._id][ATTR_OPTIONS], - **self.data.user[self._id][ATTR_OPTIONS], - } + return MERGE_OPT.merge( + self.data.system[self._id][ATTR_OPTIONS], + self.data.user[self._id][ATTR_OPTIONS], + ) return self.data.cache[self._id][ATTR_OPTIONS] @options.setter diff --git a/setup.py b/setup.py index 179b6831d..d265d8f11 100644 --- a/setup.py +++ b/setup.py @@ -47,6 +47,7 @@ setup( 'pyotp', 'pyqrcode', 'pytz', - 'pyudev' + 'pyudev', + 'deepmerge' ] )